00:01:24 Hello, how are you? 00:04:18 must... resist... tempation... to ban... canaima@*.* 00:05:10 @messages- 00:05:11 boily said 1h 28m 58s ago: with raw onions, on some tunnbröd, and an ounce of aquavit. 00:05:38 @tell boily tunnbröd is swedish not danish hth 00:05:38 Consider it noted. 00:06:40 @tell boily you might substitute fladbrød instead hth 00:06:40 Consider it noted. 00:14:11 @tell b_jonas oerjan: yes, that's what mad said too. <-- some context would have been nice. thanks for the reminder about DST though, i keep being confused about which month it is since it got moved to october in the autumn. 00:14:11 Consider it noted. 00:14:12 -!- lleu has quit (Quit: That's what she said). 00:14:35 -!- lleu has joined. 00:15:32 -!- Lilly_Goodman has quit (Ping timeout: 260 seconds). 00:19:13 izabera: actually solving the cube? Don't be ridiculous. 00:19:23 is walric even a word it is now welcome to English that's not how it works yes it is <-- english seems to have a weird relationship with the idea of a word being "real". 00:20:12 so i thought izabera was right here, but might not have been if it were another language. 00:20:24 -!- jaboja64 has quit (Ping timeout: 276 seconds). 00:20:34 A word is real if people outside a particular community regularly use it with its supposed meaning. 00:20:37 <\oren\> i'm baaaaack 00:20:51 Examples of real words are "irregardless" and "pseudopseudohypoparathyroidism". 00:21:12 Examples of non-real words are "ghoti" and "pneumonoultramicroscopicsilicovolcanoconiosis". 00:21:27 tswett: are you sure that the "outside a particular community" test works for no. 2 there 00:22:18 `? irregardless 00:22:20 Yeah. 00:22:25 irregardless? ¯\(°​_o)/¯ 00:22:42 "The medical community" isn't really a community. It's not a community if there's some property that allegedly automatically makes you part of it. 00:22:53 Or something like that. 00:23:32 All right. For some reason, I really dislike the sequence that I currently have for solving this situation: https://www.speedsolving.com/wiki/index.php/Special:MediawikiAlgDB?mode=view&view=default&puzzle=2&group=CLL&cid=40 00:24:16 (2x2. First layer is solved, second layer is oriented correctly, but two adjacent pieces are exchanged.) 00:24:44 This one looks pretty interesting: L R U2 R' U' R U2 L' U R' 00:25:48 This one too: R U2 R' U' R U2 L' U R' U' L 00:26:00 `le/rn ghoti/"Ghoti" is a very fishy spelling. 00:26:05 Learned «ghoti» 00:26:21 The hell just happened? My 2x2 was solved a little while ago, and I did nothing to it whatsoever and now it's scrambled. 00:26:36 It's been here at my side the whole time. Nobody else has come and scrambled it. 00:26:47 There are no other nearby objects which could have somehow contacted and scrambled the cube. 00:27:19 The only explanation is that it spontaneously self-scrambled without making any sound or appearing to move noticeably. 00:27:34 -!- Vorpal has quit (Ping timeout: 260 seconds). 00:27:36 (Or I scrambled it so absent-mindedly that I was left with no memories of doing so.) 00:27:51 have you slept in the meantime? 00:28:07 `? tswett 00:28:08 tswett is livin' it up with the penguins. He's a title under the cruxite in the lathe. 00:28:44 I've been sitting here for at least the last ten minutes. 00:28:58 The spontaneous self-scrambling (SSS) event happened within those ten minutes. 00:29:02 aha 00:29:57 does this happen to other things than cubes? 00:30:12 Not that I've noticed in the past. 00:30:43 maybe you just switched to another universe where you didn't solve it. 00:30:56 -!- jaboja64 has joined. 00:30:57 Hello 00:31:01 `quote berenst 00:31:04 No output. 00:31:40 `wisdom berenst 00:31:41 ​/cat: : No such file or directory 00:32:13 tswett: Have I informed you that I'm writing a compiler or two? 00:32:19 The L R U2 sequence needs U' appended to it, I think. 00:32:27 hppavilion[1]: nope. 00:32:34 tswett: I'm writing a compiler. 00:32:37 Or two. 00:32:44 Ah, neat. 00:32:47 -!- Vorpal has joined. 00:33:11 `` grep -r berenst wisdom 00:33:23 No output. 00:33:52 Okay, I like the second sequence there better. Again: R U2 R' U' R U2 L' U R' U' L 00:34:04 tswett: I'm trying to figure out how to compile a temporal logic programming language 00:34:14 There's at least one way of writing that decently concisely... 00:34:27 R U'^(U2 R') R'^(L' U) 00:35:37 -!- Lilly_Goodman has joined. 00:37:15 tswett: Is this Banach-Tarski? 00:37:32 hello 00:37:52 hppavilion[1]: I'm solving the 2x2x2 Rubik's cube. 00:37:56 Lilly_Goodman: Dios mío. ¿Tiene algún interés en la programación esotérica? 00:38:21 Which has only a teeny tiny bit to do with the Banach-Tarski theorem. 00:38:25 <\oren\> you should report this glitch to reddit 00:38:29 hppavilion[1]: como que cosas?? 00:39:05 Lilly_Goodman: Traductor Google no va a traducir esa correctamente. 00:39:18 hppavilion[1]: pienso que significa "like what??" 00:39:49 tswett: Ah 00:39:52 tswett: maybe your scrambled cube was due to a use of banach-tarski, look for the other cube. 00:39:55 -!- J_Arcane_ has joined. 00:40:31 hppavilion[1]: que haces? 00:40:48 Lilly_Goodman: 00:40:48 De alguna manera alienado todos (o al menos yo) la primera vez que vino aquí, y no parece tener ningún interés en el tema del canal, así que por qué estás aquí? 00:40:50 -!- J_Arcane has quit (Ping timeout: 244 seconds). 00:40:53 El bienvenido obligatorio... 00:40:58 `bienvenido Lilly_Goodman 00:41:01 Lilly_Goodman: ¡Bienvenido al centro internacional para el diseño y despliegue de lenguajes de programación esotéricos! Por desgracia, la mayoría de nosotros no hablamos español. Para obtener más información, echa un vistazo a nuestro wiki: http://esolangs.org/. (Para el otro tipo de esoterismo, prueba #esoteric en EFnet o DALnet.) 00:41:04 -!- J_Arcane_ has changed nick to J_Arcane. 00:41:23 HackEgo: lo se y gracias 00:41:49 Lilly_Goodman: HackEgo es un bot 00:42:04 hppavilion[1]: I can't quite figure out what the first half of that is supposed to be. "In some way everyone alienated (or at least me) the first time I came here"? 00:42:52 tswett: "You managed to alienate everybody...", IIRC 00:43:32 Lilly_Goodman: 00:43:32 Estoy tratando de averiguar por qué sigues viniendo aquí. Usted no parece que se preocupan por el propósito del canal, pero que siguen regresando. 00:43:34 In fact nosotros sí discutimos la programación esotérica de vez en cuando. 00:43:40 hppavilion[1]: disculpa 00:44:24 oerjan: I don't think my cube has infinitely many pieces. 00:44:45 Lilly_Goodman: Somos un canal de programación frikis surrealistas. Parece que han mostrado ningún conocimiento o interés en la programación. ¿Qué estás buscando en este canal? 00:45:17 s/han/no ha/ 00:46:47 Also s/o/ni/ 00:46:57 tswett: Google Translate 00:46:58 Spanish with its funky... use of lots of negatives everywhere. 00:47:21 In Spanish, you don't say "you have shown no interest in this or that"; you say "you haven't shown no interest in this nor that". 00:47:47 hppavilion[1]: como puedo instalar juegos a la canaima? 00:48:15 Lilly_Goodman: 00:48:15 Eh? 00:48:26 Lilly_Goodman: tal vez quieres hablar en #canaima. 00:48:42 Nosotros no conocemos nada de la Canaima. 00:48:59 Lilly_Goodman: 00:48:59 Por favor. Encontrar un canal que se adapte a sus intereses y pasar el rato allí. Esto claramente no es el lugar para usted. 00:49:18 tswett: I think she got kicked out of #canaima 00:50:42 tswett: no 00:50:52 hppavilion[1]: no sea asi 00:51:45 ¿Como que? Estoy tratando de decir que este no es el canal que parece estar buscando, y que debería encontrar algo mejor se adapte a sus intereses. Esto no es ese lugar. 00:52:12 hppavilion[1]: *shrug* It's not necessary for us to try to convince them to do anything. 00:52:22 Fair enough 00:52:50 tswett: Should we, the people of #esoteric, try to make an actual, useful programming language? 00:53:43 hppavilion[1]: pero no sabe como descargar aplicaciones a la computadora canaima? 00:53:51 I'm already doing that; by all means you can help! 00:54:15 Lilly_Goodman: ¿lo has preguntado en #canaima? 00:54:50 NOSOTROS NO HACEMOS CANAIMA. YO AN NO S LO QUE ES. TRATE DE HABLAR CON PERSONAS EN UN CANAL ALREDEDOR DEL CANAIMA, EN VEZ DE AQU. 00:55:01 tswett: Oooh, what's the compiler implemented in? 00:55:05 Or is it interpreted? 00:55:16 C#. I guess I'd call it interpreted. 00:55:21 It's a query language, not really a programming language. 00:55:21 :-/ 00:55:38 (Sorry for ~yelling, but Lilly_Goodman does not seem to be getting the message) 00:55:52 tswett: OK, but does it have programming features? 00:55:53 Lilly_Goodman: lo siento de que no te podemos ayudar. 00:55:59 tswett: no 00:56:15 Lilly_Goodman: Si. 00:56:17 hppavilion[1]: not really. It has, like... addition. 00:56:22 And if/then stuff. 00:56:28 tswett: What kind of query language is it? 00:56:31 It might be Turing-complete somehow. 00:56:32 tswett: Like a SQL? 00:56:36 hppavilion[1]: :'( 00:56:37 Yeah, definitely like SQL. 00:56:40 OK 00:56:43 tswett: What's the model? 00:56:58 Uhh, I guess kind of a cross between relational and object-oriented. 00:57:04 Interesting... 00:57:10 It's supposed to be useful as a language for querying existing SQL databases. 00:57:18 Oooh 00:57:27 tswett: Can you give me some example code? 00:57:31 hppavilion[1]: yeah. 00:57:36 :'( 00:58:09 Lilly_Goodman: 00:58:09 Nosotros no podemos ayudar. Por favor, encontrar a alguien que pueda hacerlo. Usted no va a encontrar en este link. 00:58:13 Uhh, lemme see. There's no spec at the moment. 00:58:17 OK 00:58:23 But yeah, example code. 00:58:27 tswett: A spec would be a good step :P 00:58:34 I should make, like, a list of features, and number them. 00:58:40 First, feature number A. 00:58:41 Good ida 00:58:44 *idea 00:58:44 (They're numbered with letters.) 00:58:55 tswett: What happens when you have a letter overflow? 00:58:59 What's feature Z++? 00:59:11 I'll start using doubled letters and whatnot. 00:59:17 After Z comes AA, then AB, ... 00:59:19 tswett: So it's base 26? 00:59:24 Something like that. 00:59:27 OK 00:59:30 hppavilion[1]: que preguntas puedo hacer en este anal?? 00:59:33 tswett: Feature #8 00:59:37 hppavilion[1]: que preguntas puedo hacer en este canal?? 00:59:38 s/8/A/ 00:59:52 Lilly_Goodman: ¿conoces la programación? 01:00:07 hppavilion[1]: remember also that it's perfectly fine to just totally ignore a question. 01:00:22 So, there are at least two sorts of types in this language: scalar types and non-scalar types. 01:00:29 Lilly_Goodman: 01:00:29 Nada, en realidad. Somos más de un canal de chat-sobre-el-cosas que un canal de pedir-us-preguntas. 01:00:29 Scalar types are things that can fit into a table cell. 01:00:43 OK 01:01:03 Some examples: unit, integer, double, string. 01:01:14 Unit? Like the unit type? 01:01:18 Yep. 01:01:28 Non-scalar types are anything else. 01:01:32 And boy, they're a doozy. 01:01:36 I'm not going to explain them at all. 01:01:39 tswett: Can a cell have type Bot (empty type)? xD 01:01:45 Maybe! 01:01:51 tswett: You don't understand them yourself, do you? 01:01:56 Nope. 01:02:02 Makes sense 01:02:06 So, the first revision of the language is going to be read-only. 01:02:17 OK... 01:02:19 Like, there's not going to be any way to change the data in a database. 01:02:25 And later it will be able to modify? 01:02:27 And I've managed to say a lot without really communicating anything. 01:02:27 Yeah. 01:02:30 So, on to the chase. 01:02:35 Suppose you've got a table called "cats". 01:02:40 You can get all of the data out of it using this query: 01:02:41 cats 01:02:42 Yay. 01:02:52 It's pretty simple. 01:03:00 Does it support digraphs for DSes? 01:03:04 Yeah, makes sense 01:03:08 Just a variable 01:03:10 For whatses? 01:03:21 hppavilion[1]: no entendi bien a que te refieres con que es un chat-sobre-el-cosas que un canal de pedir-us-preguntas??? 01:03:30 tswett: Data Structures. Non-scalars. 01:03:45 Google did a rather hilarious job with "pedir-us-preguntas" and whatnot. 01:03:58 Lilly_Goodman: "pedir-us-preguntas" = "pedirnos preguntas" 01:04:10 va a comer 01:04:15 * Lilly_Goodman va a comer 01:04:33 -!- nooga has quit (Ping timeout: 246 seconds). 01:04:47 Note that "struct" types are probably going to be scalar. 01:04:54 Ah, OK 01:05:02 And I'm not sure what you mean by digraphs. 01:05:02 tswett: And they'll get stuck in a massive data type? 01:05:11 tswett: Directed (labeled) graphs 01:05:18 Ah. 01:05:30 Pretty common terminology 01:05:30 Yeah, tables can reference each other and whatnot. 01:05:33 OK 01:05:43 I thought you meant "sequences of two symbols", the other meaning of "digraph". 01:05:53 Ah, right 01:05:59 If there's a table called "cats", then there's a type called Reference or something, which refers to rows in that table. 01:06:10 OK 01:06:14 I follow, I think 01:06:20 Anyway... 01:07:15 There are struct types. Let's say that there's a struct called, I dunno, CatInfo, with two fields: name, which is a string, and friendliness, which is an integer. 01:07:23 OK 01:07:34 Cat friendliness is measured as a fuzzy, but OK 01:08:12 There's a certain extremely important operator, which is: 01:08:13 . 01:08:17 The projection operator. 01:08:30 Suppose "ci" is a particular CatInfo value. Then you can do this: 01:08:31 ci.name 01:08:35 That'll give you the cat's name. 01:08:45 Now, the way this works is a little complicated. 01:09:06 In most programming languages, the thing on the left is an expression, and the thing on the right is an identifier, naming one of the fields of the thing on the left. 01:09:42 In this language (it's called Quendle, by the way), the thing on the right is also an expression, and it's evaluated in the "projective context" of the thing on the left. 01:09:54 Now, projective contexts (or just contexts) are something I haven't totally worked out yet. 01:10:16 Buuut... 01:10:35 You can evaluate something in the projective context of a struct type. 01:10:43 Oh, right! Quendle! 01:11:04 If you evaluate a field of that struct in that context, you end up with... the value of that field. 01:11:11 That's a pretty good model, I think 01:11:28 tswett: Can you make custom contexts? 01:11:51 tswett: And can the expression be something other than an identifier? I would doubt it, but it might be possible 01:12:08 And if a struct st has attributes a and b (both ints), will st.(a+b) return their sum? 01:12:13 -!- Phantom_Hoover has quit (Read error: Connection reset by peer). 01:13:17 As for making custom contexts: kinda... there are features producing various kinds of contexts. 01:13:27 I'll explain a little further a little later. 01:13:34 tswett: Does Quendle support Prologian knowledge bases? Perhaps there are operators to treat a table as a knowledge base in some subset format? 01:13:34 As for st.(a+b): yes, absolutely. 01:13:46 Because PROLOGian knowledge bases are cooooool 01:13:53 tswett: Excellent. Gold star. 01:13:58 heh, I don't know Spanish but that was hilarious 01:14:03 kinda 01:14:21 -!- ais523 has joined. 01:14:27 his523 01:14:27 There are no logic programming features. 01:14:30 OK 01:14:48 tswett: Can you define functions of any sort? 01:14:52 Nyow. 01:14:57 Yeah... eventually. 01:14:58 Nyow. 01:15:05 If so, I might just have to make a logic programming library ;) 01:15:08 Tables have row set types. 01:15:16 OK? 01:15:20 Row set types? 01:15:30 Set as in set theory or set as in set in stone? 01:15:31 The "cats" table will probably have a type like "set of CatInfo rows". 01:15:36 Ah 01:15:38 I get it 01:15:48 You mentioned that, References 01:16:34 And the nice thing about row set types is that the projection operator passes through them, so to speak. 01:16:45 Which is to say, you can do this: 01:16:46 cats.name 01:16:52 tswett: I have to go eat dinner in a bit 01:16:56 tswett: But go on 01:16:59 And that will give you all of the cat-names. 01:17:06 Ooooh 01:17:10 That's beautiful 01:17:23 I always like sets that can be operated on 01:17:30 Now, there's another really important operator: "where". 01:17:40 You can do this: 01:17:44 cats where friendliness >= 6 01:17:45 {1, 2, 3}+{4, 5, 6} = {5, 6, 7, 8, 9} 01:17:47 OK 01:18:02 Which... is... kind of self-explanatory, but kind of not. 01:18:05 tswett: Is this language intended to be ultra-readable? 01:18:13 Or is it a Perl 01:18:22 I wouldn't say that. It's designed to be usable, like... a lot of languages are. 01:18:25 OK 01:18:47 where could equal .. if that isn't already used. .. looks nice for where (reminds me of "such that") 01:19:05 I should go now, but I'll be back in a bit 01:19:09 That expression there essentially looks at every cat c, and evaluates the expression "c.(friendliness >= 6)". 01:19:15 All right. I'll continue monologuing. 01:19:27 I would prefer if you just waited until I was back :P 01:20:00 tswett: como puedo descargar programas a una computadora? 01:21:06 For those rows where it's true, you get that row as part of the result set. Where it's false, the rows are eliminated. 01:22:29 Now, you can also take the cartesian product of two row sets. 01:22:40 If you want to get the set of all pairs of cats, you can do something like this: 01:22:41 cats * cats 01:23:37 Next, suppose "cats" has a "name" column, and "humans" also has a "name" column. For whatever reason, you want to get the set of all pairs of cat and human such that the cat and the human have the same name. 01:23:49 This won't work, for obvious reasons: 01:23:54 cats * humans where name = name 01:23:56 Which name is which? 01:25:24 So what can you do instead? 01:25:26 Answer: 01:25:32 c: cats * h: humans where c.name = h.name 01:26:18 -!- Lilly_Goodman has quit (Ping timeout: 244 seconds). 01:27:31 Now, the exact mechanism behind this, I'm not totally sure of. 01:27:40 Let me offer a quick proposal. 01:28:00 "Proposal" is kind of a funny word for it, since I'm the one who makes the decision. 01:28:05 (I am the decider!) 01:28:55 (c: cats * h: humans) has a type like "set of rows: (struct with field "c" of type (CatInfo), field "h" of type (HumanInfo))" 01:29:33 So on the right, you simply compose fields appropriately. 01:30:35 Now, I think there's a problem with this. 01:30:39 Let me try to remember what the problem is. 01:32:47 I'm not totally sure that there is a problem, so at the moment, I'm going to assume that there is no problem. 01:34:07 And, uh... sheesh... I think that's the bulk of the language, right there. 01:34:19 Maybe I should say the core of the language. 01:35:47 -!- Lilly_Goodman has joined. 01:38:20 tswett: Do you have a "toplevel scope" operator? 01:39:39 The top-level scope is always accessible. 01:39:46 tswett: How? 01:39:52 tswett: Scope as in projective scope 01:39:57 Assuming I know what you mean. 01:40:12 Like, you can't explicitly ask for the global projective context. 01:40:19 Say you have an integer "i", a struct "st", and st has attributes num and i 01:40:29 Right, right. 01:40:31 Consider st.(num+i) 01:40:33 That raises a question. 01:40:59 Is st.(num+i) the sum of all st.num and all st.i, or the sum of all st.num and i? 01:41:35 I would say you need a global projective context nullary operator, unless you already have this figured out 01:41:58 Note, by the way, that if you do something like cats.(name + name), if you have cats named "Dorothy" and "Ann", you'll get the results "DorothyDorothy" and "AnnAnn", but not "AnnDorothy" or "DorothyAnn". 01:42:02 If you wanted those, you'd have to do... 01:42:17 (c1: cats * c2: cats).(c1.name + c2.name) 01:42:22 tswett: I figured that 01:42:46 So, right. How am I going to get around this issue... 01:42:51 tswett: Wait, tuples have a projective context? 01:43:15 Yup. You wouldn't be able to do "where" on them if they didn't have a projective context. 01:43:20 Ah 01:43:22 OK 01:43:27 How does it work, precisely? 01:43:36 That previous line of code in particular 01:43:56 So, the first half of it, "c1: cats * c2: cats" has a type something like this: 01:44:01 * Lilly_Goodman les dice a todos en este momento que Cristo te ama mas de lo que te puedes imaginar :-) 01:44:31 "ad-hoc struct with fields c1 of type CatInfo and c2 of type CatInfo" 01:44:44 And that generates a projective context. 01:44:47 Aaaaaaah 01:44:57 So that's an ad-hoc struct, more so than a tuple 01:45:06 And the two most notable things in this context are c1, of type CatInfo, and c2, also of type CatInfo. 01:45:16 I understood that 01:45:32 tswett: So what's the problem that's giving you trouble? 01:45:51 You mean besides the st.(num+i) thing you brought up? 01:46:06 tswett: Whichever it was you were talking about 01:46:25 tswett: Though how you plan to overcome st.(num+i) would also be of interest 01:46:28 I'm not totally sure if that problem really existed. 01:46:35 tswett: Ah 01:46:35 Though this problem is one of those win-win problems... 01:46:40 Either I'll run into it or I won't. 01:47:01 If I run into it, perfect—I can figure out how to fix it. If I don't run into it, perfect—the problem doesn't exist. 01:47:11 tswett: You have product types (*), but do you have sum types? 01:47:40 PetRows = CatRows + DogRows 01:47:44 Those will be added. 01:47:47 OK 01:47:58 But I want to work out the core language here before adding anything onto it. 01:48:02 tswett: Any other features of interest? And is this on GitHub? 01:48:15 It'll be on Bitbucket. 01:48:55 Other features of interest... oh yeah, there's one cool thing I want to do. 01:49:14 Suppose you've got a database where every table has this one column, say "Region". 01:49:57 You can get to a "slice database"—one where the Region columns are no longer visible, and all inter-table references automatically stay within the one Region. 01:50:10 If you ask something like "how many rows are in this table", you'll get one answer for each Region. 01:50:24 Sort of like the database has been sliced into a bunch of little databases, one for each Region. 01:50:32 And all with identical schemas. 01:51:07 * Lilly_Goodman les dice a todos en este momento que Cristo te ama mas de lo que te puedes imaginar :-) 01:53:13 OK, give me a minute to reread that a few times xD 01:54:34 Interesting 01:54:50 Uhhhhh I feel like there's something I'm missing right this moment. 01:54:53 * tswett shrug. 01:55:13 tswett: Check your 2x2x2. Maybe it's in its shift state 01:55:17 That's probably what you're missing. 01:55:24 The half of it which I can see appears solved. 01:55:41 I flipped it around to look at the other half. Once again, the half of it which I can see appears solved. 01:56:03 -!- lambda-11235 has joined. 01:56:18 But I cannot look at the whole thing at once. 01:56:26 Nyow. About that global thing. 01:56:43 You know, you might be totally right. 01:56:47 The tragedy of limipresence 01:57:13 *Mind blow* 01:57:14 Maybe there does need to be a thing called "global" you can use to explicitly request the global scope. 01:57:23 Yep. 01:57:23 What's limipresence? 01:57:38 tswett: Finite presence; if you are not omnipresent, you are limipresent 01:57:48 Ah. 01:58:51 tswett: You could also have a "one level up" operator that isn't global, but it's the scope containing the current scope 01:59:07 That one I don't like. 01:59:18 -!- XorSwap has joined. 01:59:20 I don't really either, but I like sharing ideas xP 01:59:48 So lemme see. Have we totally figured out the core language here? 01:59:54 :|B <-- beard 02:00:05 tswett: How do you order a selection? 02:00:13 By using features I haven't come up with yet. 02:00:20 OK 02:00:23 tswett: How about 02:00:28 Whoops 02:00:31 Let's try to think of some really complicated queries or something. 02:00:52 tswett: Select the last item in the table that has some property 02:01:17 -!- bender| has joined. 02:01:18 Also something I haven't come up with yet. So far, all row sets are orderless. 02:01:30 Oh 02:01:33 That's not very relational 02:01:38 -!- XorSwap has quit (Client Quit). 02:01:43 That's exactly relational. 02:01:57 tswett: Though I think if you give every table a row# item, you can accomplish that 02:02:12 tswett: Perhaps you should also have a unary . operator, that produces an expression that can be applied to extract a value? 02:02:22 What do you mean by that? 02:02:25 .(x+y) can be applied to anything with attributes x and y 02:02:31 And will return their sum 02:02:32 ... 02:02:36 No, terrible idea 02:02:41 Well, maybe 02:02:41 That's just (x+y). 02:02:53 Like... 02:03:06 tswett: But for what sc- OH! can you have unevaluatable expression you can later evaluate? 02:03:21 Like (x+y) where x and y are undefined? 02:03:29 You know how if you have a cat Furissa of friendliness 8, and you evaluate furissa.(name + to_string(friendliness)), you get "Furissa8"? 02:03:37 You can do something like this: 02:03:45 -!- Lilly_Goodman has quit (Ping timeout: 276 seconds). 02:03:46 OK 02:04:09 "Let the name_with_friendliness of a CatInfo be name + to_string(friendliness)." 02:04:20 Then you can do furissa.name_with_friendliness. 02:04:23 OK 02:04:31 That looks good 02:04:34 Or: cats where length(name_with_friendliness) <= 7 02:05:13 By the way, this lets you do some awful stuff that I hope nobody will ever do. 02:05:15 (ci: CatInfo).name_with_friendliness = ci.name + to_string(ci.friendliness) 02:05:20 And it's a futile hope, because someone will definitely do this. 02:05:25 tswett: Such as? 02:05:52 You could say something like: "Let the one_more of an integer x be x + 1." 02:05:57 Oh, I assume = has its own contextiness 02:06:06 And then you could do something like this: (3).(one_more + one_more) 02:06:08 And you'll get 8. 02:06:09 Where the lhs of = returns a reference instead of a value 02:06:16 -!- lambda-11235 has quit (Max SendQ exceeded). 02:06:25 Eeew... 02:06:28 Well, I'm using = for equality comparison, not assignment. 02:06:29 I need to go shower 02:06:29 I know, right? 02:06:35 tswett: OK then, := 02:06:43 There we go. 02:06:53 -!- lambda-11235 has joined. 02:07:14 So am I correct to guess that :='s lhs is evaluated to produce a reference? 02:07:17 I'm not sure what the syntax would be, but it might be more like this: 02:07:25 And that the scope created is used on the rhs? 02:07:33 (CatInfo).name_with_friendliness := name + to_string(friendliness) 02:07:40 Well... the short answer is no. 02:07:52 The LHS is just an identifier, or a type with an identifier after it like that. 02:08:01 tswett: OK :/ 02:08:02 It's not really an expression you can evaluate. 02:08:11 But I do hope to do something kind of along those lines later. 02:08:11 tswett: I guess that's for the best 02:08:26 Because x+1 := 3 is a pain to evaluate (it would, in theory, set x to 2) 02:08:33 (but that's hard) 02:08:33 Right. 02:08:43 Not to mention that that's sometimes uncomputable. 02:08:48 Of course 02:08:59 And uncomputability is itself uncomputable oftentimes 02:09:00 And so on 02:09:01 But: make it so that if a query returns some rows that come from a table, you can, like, set the output of the query. 02:09:04 Something like... 02:09:27 Listening. 02:09:49 update (cats where name = "Furissa").name := "Furrison" 02:10:09 Oh god. 02:10:22 -!- Lilly_Goodman has joined. 02:10:30 It'll undoubtedly be kind of weird. 02:10:33 Does that modify the result of a query for cats where name = "Furissa"? 02:10:42 Thankfully, no. 02:10:42 Without changing Furissa to Furrison? 02:10:45 Oh, good 02:10:57 Oh, good || Oh, god. 02:11:25 Essentially, it performs the query 'cats where name = "Furissa"' to come up with a list of rows of the table "cats". 02:11:36 OK 02:11:43 Then it applies the "name" projection to that to come up with a list of table cells containing strings. 02:11:45 And then it sets it to Furisson 02:11:54 And one of the things you can do with a table cell containing a string is to change what that string is. 02:12:11 So really, "cats" has a type like... 02:12:24 UpdatableInsertableDeletableRowset 02:12:49 Then you do "where name = "Furissa"" on it, getting an... 02:12:55 UpdatableDeletableRowset 02:13:04 Then you do ".name" on that, giving you an... 02:13:10 UpdatableDeletableRowset 02:16:49 Now, you know how I mentioned I want this to be usable as a front-end to a SQL database? 02:17:53 I guess that might actually initially be the *only* way to do it. 02:18:08 Lemme think what that might look like. 02:19:19 You know how if you have a cat Furissa [...] <-- then you shouldn't be trusted around cats hth 02:22:07 Table CallTicket := SqlTable(cts_call_ticket) { integer IdNumber := "ticket_id" primarykey; string Description := "ticket_desc" } 02:22:09 oerjan: tht 02:22:22 And then... 02:23:52 Table TicketEvent := SqlTable(cts_ticket_event) { reference Ticket := "ticket_id"; string Description := "event_desc"; datetime Datetime := "event_datetime" } 02:24:12 And then you can do stuff like... 02:24:36 (TicketEvent where Ticket.Description = "Oh no! Everything's on fire!").Datetime 02:24:50 Which would be a SQL query something like... 02:25:38 SELECT event.event_datetime FROM cts_call_ticket ticket, cts_ticket_event event WHERE ticket.ticket_id = event.ticket_id AND ticket.ticket_desc = 'Oh no! Everything''s on fire!' 02:25:46 -!- lambda-11235 has quit (Ping timeout: 252 seconds). 02:31:56 -!- lambda-11235 has joined. 02:43:27 tswett: Oh, here's a possibly-core language feature you might want to look into 02:43:32 UNION and INTERSECTION 02:44:22 && and || if you please 02:44:28 -!- lambda-11235 has quit (Max SendQ exceeded). 02:45:34 -!- lambda-11235 has joined. 02:47:23 tswett: Event-driven database... 03:11:13 shachaf: Is there such thing as a Zeration Type? 03:11:40 I don't know. 03:12:20 that would be x -> Void, wouldn't it? so negation. 03:12:28 shachaf: Weren't you the one who knew about A^B earlier? 03:12:43 oerjan: But if A -> B is A^B 03:12:44 I don't know what zeration is. 03:12:46 or just Void for zero itself. 03:13:00 shachaf: Successor, basically, but with two arguments. The basic hyperoperation 03:13:10 And Void = 0, IIRC 03:13:13 i assumed it's the operation of turning something into zero. 03:13:30 ...ic 03:13:44 `? ic 03:13:53 ic what you did there. 03:14:02 oerjan: What's ic? 03:14:10 @google "look for a ...ic transporter" 03:14:11 http://nethack.wikia.com/wiki/Wizard_quest 03:14:11 Title: Wizard quest - Wikihack - Wikia 03:16:55 hppavilion[1]: it sounds like it would need to be a function that ignores one of its arguments 03:17:16 a -> b -> Maybe b 03:17:48 @djinn a -> b -> Maybe b 03:17:48 f _ a = Just a 03:18:15 lambdabot: maybe a bit confusing variable choice there 03:18:51 Just a bit 03:18:56 oerjan: Yes, it is 03:19:12 or wait... 03:19:23 oerjan: did you find your swatter yet twh 03:19:23 i think i'm mixing levels up there 03:19:42 shachaf: my swatter was never missing 03:19:55 i guess that wasn't really swatworthy 03:19:56 it was my saucepan that had been absconded 03:20:00 oh, right 03:20:40 * oerjan hits shachaf with a damp straw ---- 03:20:50 do you ever cook with the saucepan 03:20:53 ===\~~/ 03:21:02 no. 03:21:22 hppavilion[1],shachaf : `exp t' is the type of bags of inhabitants of `t', at least for finite `t' 03:21:26 <\oren\> yay bacon! 03:21:32 ===\ꙮꙮ/ 03:21:37 ski: Oh, you're here too 03:21:38 ski: Are you sure? 03:21:57 ski: That would be (-> Nat) 03:22:15 I just realized that kleene algebra and type theory work well together 03:22:30 Hmm, I remember thinking about this and coming to some conclusion but it was years ago. 03:22:34 + in kleene algebra = + in type theory, * in kleene algebra is like * in type theory 03:23:11 shachaf : at least judging from the expansion `exp t = sum_{i : |N} t^i / i!' 03:23:15 hppavilion[1]: on second thought, i don't think zeration and successor can be distinguished at this level 03:24:05 oerjan: Successor takes 1 arg, zeration 2 03:24:20 So I think we can define kleene exponentiation 03:24:32 Also, S() is ? 03:24:48 The successor of a string is that string OR the null string 03:25:02 ski: shachaf: _finite_ bags 03:25:26 so (-> Nat) is excluded if it's infinite... 03:25:47 oerjan : "at least for finite `t'" -- but, yes, also finite multiplicity, so you're correct 03:26:07 I think kleene ^ may correspond to y/// 03:26:20 Somehow 03:26:42 hppavilion[1]: no, i mean, this arithmetic <-> type correspondence doesn't have a notion of unused arguments, since you don't have functions, but expressions on the left side 03:26:50 oerjan: Ah 03:27:04 Right, right, I get it 03:30:45 ski: wait, does this mean Nat is e? >:) 03:32:19 ski: oh. i think i see what's going wrong. the x^n/n! <-> n-bag of x correspondence breaks down because of tuples with repeated elements. 03:32:24 -!- lambda-11235 has quit (Ping timeout: 244 seconds). 03:32:54 Oh, repeated elements, that's it. 03:33:08 I remembered there was an issue like that, but I thought it was about unordered tuple. 03:33:11 tuples 03:33:56 oerjan : breaks down how ? 03:33:59 shachaf: well sure, bags are unordered tuples 03:35:32 If x is Bool, then there are three 2-bags of x. 03:36:04 but 4 2-tuples 03:36:18 and 3 /= 4 / 2! 03:37:34 -!- Lilly_Goodman has quit (Ping timeout: 244 seconds). 03:38:02 looked at differently: x^n/n! is rarely an integer. 03:38:13 -!- Lilly_Goodman has joined. 03:42:25 * ski doesn't see a problem 03:43:59 ski: X^n represents n-tuples of X. to divide by n!, there have to n! tuples that identify because they're the same bag. but that only happens for tuples that have all elements distinct and are permutations of each other. 03:44:05 *have to be 03:44:05 `t^i / i!' isn't to be viewed as a type divided by another type. but rather a type "divided" by a quotient (/factor) type of that type 03:44:07 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: t^i: not found 03:44:36 ski: yes, but not all equivalence classes have size i! 03:44:52 is that a problem ? 03:44:59 i should say so. 03:45:03 why ? 03:45:21 -!- lambda-11235 has joined. 03:45:30 ...oh well... 03:45:56 ski: Why do you think it's not a problem? 03:46:04 if you don't have that (t^i / i!) 03:46:11 argh stupid return 03:46:38 if you don't have that (t^i / i!) * i! == t^i then it's not a very good correspondence with arithmetic. 03:46:48 shachaf : only because i can't see it 03:47:49 oerjan : if you accept my ".. isn't .. rather ..", then that `*' isn't an ordinary cartesian product of two sets 03:48:34 so while we want (finite) sets/types to correspond with naturals here, i don't see why we should expect factor/quotient dittos to also correspond with naturals 03:48:53 (perhaps there's still a problem. but i don't see it atm) 03:49:16 -!- lambdabot has quit (Remote host closed the connection). 03:49:28 ski: * is already well-established as cartesian product. 03:49:47 yes, for normal uses of it 03:49:52 like + is disjoint/tagged union 03:50:36 i'm saying any extension to the correspondence which doesn't fit in with those isn't particularly interesting. 03:51:16 however, viewing `t^i / i!' as being about quotients, it's not clear (to me) that it ought to satisfy a relation like `(t^i / i!) * i! = t^i', relating it to a more restricted cartesian product 03:51:53 FINE 03:52:00 (because, a quotient thing corresponding to cartesian product requires each equivalence class to have the same size. but that's exactly what's not the case here with our `t^i / i!') 03:52:42 -!- lambdabot has joined. 03:52:44 let me rephrase that: _i_ don't find such an extension interesting unless it has some other property to make up for it. 03:52:58 ok 03:54:32 this seems like a p. awkward way to write in point-free style: http://metatree.xyz/treeprover/ 03:59:49 -!- tromp has joined. 04:00:45 -!- nooga has joined. 04:03:05 -!- Lilly_Goodman has quit (Ping timeout: 248 seconds). 04:03:43 -!- Lilly_Goodman has joined. 04:05:18 -!- nooga has quit (Ping timeout: 276 seconds). 04:09:52 -!- Lilly_Goodman has quit (Ping timeout: 268 seconds). 04:12:44 -!- Lilly_Goodman has joined. 04:19:47 -!- Lilly_Goodman has quit (Ping timeout: 248 seconds). 04:24:22 -!- treaki__ has joined. 04:25:04 -!- MoALTz has quit (Ping timeout: 244 seconds). 04:27:24 -!- treaki_ has quit (Ping timeout: 276 seconds). 05:13:39 -!- MoALTz has joined. 05:29:15 -!- hppavilion[1] has quit (Ping timeout: 264 seconds). 05:49:22 -!- lambda-11235 has quit (Quit: Bye). 05:57:03 -!- jaboja64 has quit (Remote host closed the connection). 06:15:02 -!- me2 has joined. 06:40:52 -!- Sgeo__ has joined. 06:49:15 principle/principal are the worst homophones 06:49:44 they're just common enough that people use them regularly, but uncommon and long enough that they don't know the difference 06:49:47 this annoys me 06:49:51 it's the principal of the thing, really 07:29:45 coppro: surely the principle issue is understanding what's meant 07:45:00 -!- nooga has joined. 07:56:13 -!- ais523 has quit. 07:58:00 there must be room for a unified spelling here... principale? 08:10:43 * oerjan wanted to make a "beyond the pale" pun but instead learned what "the pale" actually meant 08:17:48 -!- ais523 has joined. 08:38:30 -!- nooga has quit (Ping timeout: 246 seconds). 08:39:31 -!- nooga has joined. 08:53:02 . o O ( the mopale ) 09:05:34 -!- nooga has quit (Ping timeout: 260 seconds). 09:11:50 -!- bender| has quit (Quit: [restarting]). 09:18:28 -!- bender| has joined. 09:25:26 -!- oerjan has quit (Quit: Nite). 09:28:52 -!- J_Arcane has quit (Ping timeout: 244 seconds). 09:35:35 -!- me2 has quit (Read error: Connection reset by peer). 09:36:36 -!- me2 has joined. 10:07:46 -!- impomatic_ has quit (Quit: http://corewar.co.uk). 10:10:13 -!- AnotherTest has joined. 10:15:57 -!- lleu has quit (Quit: That's what she said). 10:16:15 -!- lleu has joined. 10:17:26 -!- boily has joined. 10:46:58 huh, I just realised that there's an easy way to construct hash collisions: SHA-256(512×(2²⁵⁶+(2²⁵⁶)!) zeroes) = SHA-256(512×2²⁵⁶ zeroes) 10:47:07 let me know if there's anything wrong with my reasoning 10:47:20 of course, 2²⁵⁶ factorial is way too large for the collision to be useful at all 10:47:27 and we don't know what the actual hash value is 10:47:32 but I don't see any reason why this method wouldn't work 10:54:37 ais523: the input of SHA-256 is limited to 2^512-1 bits due to the preprocessing step. 10:54:47 > append length of message (without the '1' bit or padding), in bits, as 64-bit big-endian integer 10:54:49 :1:15: parse error on input ‘of’ 10:54:56 oh, 10:56:19 hmm 10:56:30 I guess you just append a zero? assuming two's complement 10:58:19 ais523: I meant that there is no standard way to handle more than 2^512-1 bits of input with SHA-256 10:58:36 so well, SHA-256(512*2^256 zeroes) is not well defined 10:58:40 you mean 2⁶⁴ 10:58:45 but hmm, right 10:58:46 ah 10:58:47 yeah 10:58:58 perhaps it's intentional to stop this sort of attack 11:01:00 ais523: probably more about preventing an extension attack? 11:01:26 this reminds me of an extension attack 11:03:26 hmm, I think it works for SHA-3, though (although the description on Wikipedia is unclear) 11:03:42 bomb in bruxelles 11:04:06 two bombs 11:04:13 one in the airport and one in the subway 11:08:51 what. now? 11:08:55 @massages-loud 11:08:55 oerjan said 11h 3m 17s ago: tunnbröd is swedish not danish hth 11:08:55 oerjan said 11h 2m 15s ago: you might substitute fladbrød instead hth 11:09:56 oh fuck. 11:10:17 ais523: probably the role of hashing function has been reduced since the introduction of MD5/SHA-1/2. 11:10:43 well they're used for all sorts of things, requiring different levels of security 11:11:01 yeah, but now we distinguish MACs from hash functions 11:11:04 there's even an argument for using cryptohashes for hash tables 11:11:08 (correctly) 11:11:15 lifthrasiir: I was actually always wondering what the distinction was 11:12:25 https://www.reddit.com/live/wmk50bsm9vt3 11:13:42 ais523: IIUC hash functions ensure the data integrity (that is, it is not tampered since the beginning of transfer) but not the authenticity (that is, it came from who we can or learned to trust before) 11:14:06 MAC has an additional parameter for keys for that reason 11:30:51 -!- boily has quit (Quit: POOL CHICKEN). 12:05:56 @tell hppavilion[1] The core language pretty much only has two features: products and "where". Everything else is going to be an extension. 12:05:56 Consider it noted. 12:20:19 -!- AnotherTest has quit (Ping timeout: 248 seconds). 12:30:08 -!- lleu has quit (Quit: That's what she said). 12:44:18 argh! this stupid build system 12:44:26 @messages 12:49:01 * b_jonas screams 12:52:43 -!- ais523 has quit. 12:52:58 -!- vanila has joined. 12:53:02 hello 12:53:30 -!- Sgeo__ has quit (Ping timeout: 244 seconds). 12:55:18 @tell 12:55:18 Who should I tell? 12:55:24 @tell zzo38 i cant load your gopher :( 12:55:24 Consider it noted. 13:10:29 -!- lynn has joined. 13:40:01 idea: using the git commit hash as the version 13:40:04 -!- lleu has joined. 13:40:04 -!- lleu has quit (Changing host). 13:40:04 -!- lleu has joined. 13:40:12 izabera, bad idea not sortable 13:40:34 good point 13:40:35 -!- nycs has joined. 13:40:40 well 13:40:45 it is sortable 13:40:52 just not the obvious way 13:41:07 true :P 13:49:34 -!- AnotherTest has joined. 13:54:48 -!- lambda-11235 has joined. 14:01:47 vanila: use the http access instead, at http://zzo38computer.org/textfile/miscellaneous/ 14:01:57 unless you can't use http either that is 14:03:17 but i want gopher 14:05:06 what's the error if you try to access the gopher? 14:10:38 -!- XorSwap has joined. 14:25:48 -!- jaboja has joined. 14:50:13 -!- XorSwap has quit (Quit: Leaving). 15:02:28 -!- lambda-11235 has quit (Quit: Bye). 15:03:38 -!- p34k has joined. 15:14:01 -!- jaboja has quit (Remote host closed the connection). 15:46:04 -!- earendel has quit (Ping timeout: 244 seconds). 15:46:38 According to http://magic.wizards.com/en/articles/archive/card-preview/basic-lands-shadows-over-innistrad-2016-03-21 , Shadows over Innistrad will have three arts for each basic land. Isn't it supposed to have four arts each, since it's a large set? 15:59:23 hmm, the third island seems too colorful 16:02:08 -!- bender| has quit (Quit: Leaving). 16:17:49 there's been some colorful islands already. 16:46:57 -!- me2 has quit (Read error: Connection reset by peer). 16:50:28 -!- me2 has joined. 17:17:16 -!- lambda-11235 has joined. 17:33:46 -!- mihow has joined. 17:55:27 -!- nooga has joined. 18:09:40 -!- jaboja has joined. 18:11:49 -!- hppavilion[1] has joined. 18:20:01 You know what'd be awesome? 18:20:16 A hybrid between a proof assistant and a practical programming language 18:20:26 @messages-louder 18:20:27 tswett said 6h 14m 30s ago: The core language pretty much only has two features: products and "where". Everything else is going to be an extension. 18:23:33 -!- lambda-11235 has quit (Ping timeout: 240 seconds). 18:28:25 -!- lambda-11235 has joined. 18:30:27 -!- nooga has quit (Ping timeout: 264 seconds). 18:33:03 -!- lambda-11235 has quit (Ping timeout: 276 seconds). 18:40:22 -!- jaboja has quit (Ping timeout: 252 seconds). 18:50:16 -!- hppavilion[1] has quit (Ping timeout: 264 seconds). 18:55:24 -!- earendel has joined. 18:56:50 -!- hppavilion[1] has joined. 18:58:20 [wiki] [[LABEL]] N https://esolangs.org/w/index.php?oldid=46631 * FricativeMelon * (+2751) Created page with "'''LABEL''' is a programming language based on goto-like jumps and loops and whose memory consists entirely of how many jumps have been made. == Syntax == {| class="wikitabl..." 18:59:25 -!- nycs has quit (Quit: This computer has gone to sleep). 19:01:37 -!- I has joined. 19:02:00 -!- I has changed nick to Guest11109. 19:14:07 -!- Guest11109 has quit (Quit: This computer has gone to sleep). 19:14:46 -!- nycs has joined. 19:20:25 -!- jaboja has joined. 19:26:50 -!- nooga has joined. 19:31:29 -!- nooga has quit (Ping timeout: 260 seconds). 19:37:22 [wiki] [[Talk:Seed]] N https://esolangs.org/w/index.php?oldid=46632 * Dittoslash * (+123) Created page with "possible seed that produces seed? ~~~~" 19:44:03 -!- lambda-11235 has joined. 19:45:09 -!- J_Arcane has joined. 19:50:01 -!- Lilly_Goodman has joined. 19:53:12 -!- int-e has changed nick to int-e_. 19:53:18 -!- int-e_ has changed nick to int-e. 19:56:36 -!- lleu has quit (Read error: Connection reset by peer). 19:58:20 -!- aloril_ has quit (Ping timeout: 260 seconds). 19:58:54 -!- tswett has quit (Ping timeout: 260 seconds). 19:58:54 -!- cnr has quit (Ping timeout: 260 seconds). 20:00:00 -!- Warrigal has joined. 20:03:42 -!- cnr has joined. 20:03:44 -!- cnr has quit (Changing host). 20:03:44 -!- cnr has joined. 20:05:32 -!- nooga has joined. 20:05:40 -!- lambda-11235 has quit (Quit: Bye). 20:12:02 -!- aloril_ has joined. 20:14:29 -!- Taneb has changed nick to nvd. 20:34:46 -!- hppavilion[1] has quit (Ping timeout: 252 seconds). 20:47:47 -!- Phantom_Hoover has joined. 20:50:06 -!- nooga has quit (Ping timeout: 268 seconds). 20:50:39 -!- Lilly_Goodman has quit (Read error: Connection reset by peer). 20:51:17 -!- Lilly_Goodman has joined. 20:54:53 hola 20:55:14 are you from venezuela 20:58:10 Phantom_Hoover, you can't just ask someone if they're from Venezuala 20:58:25 but we get so many people from venezuela! 20:58:43 We also get a lot of people from Finland 20:59:02 [wiki] [[LABEL]] https://esolangs.org/w/index.php?diff=46633&oldid=46631 * FricativeMelon * (+213) 20:59:19 We've in the past had a statistically improbably number of people from a small town in south west Northumberland! 21:00:08 why did we never make a `hexcome 21:01:45 -!- nycs has quit (Quit: This computer has gone to sleep). 21:02:09 -!- hppavilion[1] has joined. 21:03:18 just do it 21:05:09 -!- nooga has joined. 21:11:24 -!- nooga has quit (Read error: Connection reset by peer). 21:14:37 -!- nooga has joined. 21:17:19 -!- I has joined. 21:17:39 -!- I has changed nick to Guest25470. 21:38:25 -!- p34k has quit. 21:42:31 -!- Guest25470 has quit (Ping timeout: 268 seconds). 21:45:08 @ask tswett Wait, aren't functions going to be in the core of Quendle? They should be. 21:45:08 Consider it noted. 21:52:59 User-definable functions... yeah, those will probably be in the core. 21:53:02 -!- Warrigal has changed nick to tswett. 21:53:12 I wonder if I have any new messages. 21:53:36 Probably not. After all, lambdabot would have told me, out loud, in the channel, if that were the case. 21:53:41 tswett: Oh, Warrigal, right 21:54:02 tswett: What about the "is item of" operator? 21:54:29 (traditional: ∈) 21:54:42 I'm writing a mockup DiGraph library for Quendle based on my limited knowledge 21:54:52 @slep tswett 21:54:52 I'd rather not; tswett looks rather dangerous. 21:54:53 e and ∈ look very similar in Neoletters 21:55:04 pity :P 21:55:24 Yeah, that'll be one of the operators. 21:55:27 * int-e sidles home 21:55:48 -!- p34k has joined. 21:57:44 tswett: I'm trying to define subset of in my mockup, but I'm assuming Quendle is fully declarative. Does it have Haskell-style list building? 21:58:03 So far there are no lists, only sets. 21:58:16 tswett: Or, for this, Set Building 21:58:44 The features I've already described are kind of like Haskell-style set building. 21:58:48 {f(x) : x ∈ s, ...} 21:58:52 tswett: Oh, right 21:59:12 tswett: I presume Quendle has unicode support as an alternate to ASCII? 21:59:28 So I can, if I please, literally use ∈ in my code? 21:59:31 -!- Lilly_Goodman has quit (Quit: (saliendo)). 21:59:38 Quendle doesn't even support ASCII as such. 21:59:47 There's no way to say "I don't want the rest of Unicode". 21:59:51 tswett: What does it support? EBDIC? 21:59:54 Oh 21:59:55 OK 21:59:58 -!- Lilly_Goodman has joined. 22:00:20 tswett: Do you mean you can't exclude data to unicode strings, or that untypable characters are required to use the language? 22:00:42 Something like the former. 22:01:07 tswett: Given sets a, b, would a ∈ b return one of {True}, {False}, or {False, True} based on whether all items of a are in b? 22:01:20 Basically, does ∈ work over sets? 22:01:32 I'll probably make that invalid for the time being. 22:01:46 tswett: OK 22:01:56 tswett: What do I do to test for subsetship? 22:02:02 I accidentally got my 2x2 in a certain interesting configuration. I went to this solver site to see if there was a particularly interesting algorithm to produce this configuration. 22:02:05 Given a, b 22:02:24 I guess there's going to be an operator called "subset" or something. 22:02:41 tswett: With alternative ⊂, I hope? 22:02:53 Turns out that yes, there's definitely a particularly interesting algorithm for this configuration. Namely: U F2 U2 R2 U 22:03:03 hppavilion[1]: yup, I suppose that would also work. 22:03:24 tswett: See, if the element-of operator works over sets (as mentioned above), you can do (non-strict) subset with !(False ∈ (a ∈ b)) 22:03:55 Yup. 22:04:19 Which is why there's a subset operator—otherwise you'd have to do something like that. :) 22:04:31 tswett: Ah 22:04:45 tswett: Is there a reduce operator? 22:04:47 Oh, have to go 22:04:53 Be back on in a bit when I'm out of this room 22:05:05 Reduce, what would that be? 22:05:33 There are gonna have to be "all" and "any" operators that work on sets of booleans. 22:06:23 -!- AnotherTest has quit (Quit: ZNC - http://znc.in). 22:07:12 !bf ,[>>+>>,]<<[[<<]>>[-[<]>>[.<<->]>+>>]<<]!foo1234bar 22:07:12 No output. 22:07:18 Turns out the sequence I just gave is self-inverse. Let me investigate why that is. The sequence can also be written as (F2 U2 R2 U2)^U. 22:07:39 F2 U2 R2 U2 is also self-inverse. 22:09:25 -!- hppavilion[1] has quit (Ping timeout: 244 seconds). 22:15:28 Let's see. Double that, you get F2 U2 R2 U2 F2 U2 R2 U2, which is, of course, R2^(F2 U2) R2^(U2). 22:16:07 Hm. 22:20:06 -!- boily has joined. 22:26:48 -!- Sgeo__ has joined. 22:27:42 `wisdom 22:28:13 ii/Ii is a municipality in Finland, no matter what you do. Except for speaking Swedish. 22:31:57 nvd: whoa whoa whoa, who's that in -lens? 22:36:01 hellochaf. you would've liked yesterday's Douteux. special pooches. 22:36:15 pooches everywhere. pooches everytime. always pooches. 22:42:15 -!- lynn_ has joined. 22:44:36 I guess another way of saying that is: the involutions F2 and R2^U2 commute. 22:45:57 -!- lynn has quit (Ping timeout: 260 seconds). 22:46:20 Which is not surprising: the effect of R2^U2 on the F layer is to swap two of its pieces. 22:47:18 -!- hppavilion[1] has joined. 22:48:34 tswett: Back 22:48:38 Lemme look at algorithms for the opposite corner swap now. 22:52:13 Okay, this one looks pretty interesting: R U' R' U' F2 U' R U R' U F2 22:53:38 It can also be written as: (U' F2 U')^(U'^R) U F2 22:54:42 Swaps UBL and UFR. Never moves DBL. 22:57:55 Oh, but there's also another way of writing it. 22:59:18 U'^R U' U^(F2 U' R) 23:00:22 ;) 23:02:12 is there a bash program to print the nth command line argument out? 23:02:28 like pi 3 a b c d would print c 23:02:53 Couldn't be hard to write a shell script to do that. 23:03:12 thats not what im asking 23:03:50 What do you mean by "a bash program"? You mean a program that you can run from bash? 23:04:05 pikhq: pi 3 a b c would print b, would it not? 23:04:12 Whooops, vanila 23:04:18 Don't know how I messed that up 23:05:00 I dont mind 23:05:25 vanila: I know 23:05:36 -!- Lilly_Goodman has quit (Read error: Connection reset by peer). 23:05:40 -!- mad has joined. 23:05:40 vanila: But my point stands; pi 3 a b c should print b, not c 23:06:05 madios would be a good portutation for mad 23:06:06 ok 23:06:27 -!- Lilly_Goodman has joined. 23:06:59 Did it. hppavilion[1]'s version. 23:07:07 #!/bin/bash 23:07:07 eval 'echo "${'"$1"'}"' 23:07:08 -!- ais523 has joined. 23:07:12 * hppavilion[1] does a happy dance 23:07:19 tswett: I thougt it'd be something like that, with $$ 23:07:34 I thought it'd involve $@ or whatever. 23:07:41 tswett: WROOOOOOOONG 23:07:44 Apparently 23:07:49 I looked at this: http://stackoverflow.com/questions/1497811/how-to-get-the-nth-positional-argument-in-bash 23:07:56 I decided I liked the "eval" solution the best. 23:08:24 ah, bash 23:08:34 I thought it was Perl but $$ and $@ are unrelated in Perl 23:08:36 -!- jaboja has quit (Ping timeout: 246 seconds). 23:09:00 http://www.agner.org/optimize/instructionset.pdf "Proposal for an open standard instruction set" What do you guys think of this? 23:09:01 other than that they're both punctuation variables 23:09:58 eval is dangerous 23:10:11 its a nice hack but not safe 23:10:12 mad: /me looks 23:10:50 it's still assuming that processors work much like today's processors :-( 23:11:13 I don't like that assumption; I think we'd have moved on to different processor architectures long ago if not for backwards compatibility 23:12:35 what do you think processors would look like if they weren't stuck with backwards compatibility? 23:12:37 What's wrong with x86 and ARM? 23:13:03 x86's worst sin IMHO is byte-sized instruction size granularity 23:13:20 -!- jaboja has joined. 23:13:24 with very complex determination of instruction length due to prefixes etc 23:14:13 mad: I think they'd allow for more dynamic parallelism and aliasing behaviour 23:14:43 -!- nooga has quit (Ping timeout: 248 seconds). 23:14:46 Proposal: all instructions are encoded as UTF-8. 23:14:48 -!- nooga_ has joined. 23:15:48 that only goes up to 31 (32?) bits even if generalized, though 23:15:50 ais523 : that means that they wouldn't have strictly ordered memory loads/stores? 23:15:52 and dos so quite inefficiently 23:16:07 mad: most processors don't even now, x86 is weird in that regard 23:16:13 well 23:16:23 I mean strictly ordered from the view of a single thread 23:17:01 Ie irl it's out-of-order but from the view of the instruction sequence, loads/stores happen in-order 23:17:59 well, I think threads need to be /really/ cheap 23:18:19 so that if you write "a = 1; b = 2" you can run those in separate threads to gain a little performance 23:18:25 assuming a and b don't alias 23:18:39 hmm, that's interesting 23:18:46 how would you do it? 23:20:03 completely change how OS's schedule threads? (considering that right now, schedulers are basically hostile to short lived threads) 23:20:13 -!- Lilly_Goodman has quit (Ping timeout: 244 seconds). 23:20:19 I'm not sure yet 23:20:28 you'd need some lightweight method of specifying fork/join directly in the asm 23:20:34 there are a few possibilities 23:20:58 I believe the processor would schedule threads in hardware on a small scale, and ask the OS for help only when there were too many to fit on the processor 23:21:19 swapping in and out entire processes if possible, and groups of threads if the processes didn't fit 23:21:29 I was thinking about threads while I was doing that OS in Rust. 23:21:46 ais523 : hmmm 23:22:06 -!- Lilly_Goodman has joined. 23:23:00 I had a thread-switching method (which I never tested) that was pretty simple. 23:23:07 ais523 : maybe you could have inactive cores be placed in a pool that can be instantly allocated by the currently running "most important process" (presumably, the process 'on front' in a windows-style scheduler that priorizes GUI programs) 23:23:27 Push all registers. Change the stack pointer to something else. Pop all registers. 23:23:36 and if it has available cores in that pool, the "asm fork/join" is fast 23:24:00 ais523: well, the cpu already *sort of* does that, as long as you're content with the threads using the same register set, it runs the threads in parallel only if there's no unpredicted branch or other difficult instruction in them, and on x86 the memory access instructions between those threads aren't reordered. 23:24:02 Here's a thought. Make it so you can pretty much have an unlimited number of threads going at once. 23:24:24 b_jonas: yes, x86 internal design is moving in the direction of trying to convert code into that form automatically via static analysis 23:24:38 which is one of the reasons that x86es are so hellishly complicated 23:25:14 ais523 : that being said, if programs are going to expose parallelism through threading, there are already good designs oriented around that (current generation of SPARCs heavily bank on this) 23:25:19 -!- oerjan has joined. 23:25:31 There's a thread queue. The processor repeatedly grabs the first 16 of those threads, executes a bit, and puts them all back on the queue. 23:25:56 tswett: probably it should grab the first 16 runnable threads 23:25:58 ais523: I imagine a cpu could have "hint" style thread fork and join instructions, which try to run a jump in a separate lightweight thread if it can, otherwise just run them one after the other. sort of like how the x86 transactional instructions are "hint" style: there's an easy mapping to trivial instructions the cpu can always fall back to in difficult cases. 23:26:01 using some sort of method to determine runnability 23:26:11 ais523: as in, these instructions would be jumps, not nops. 23:26:48 I think it's weird how CPUs go to a humongous amount of effort to execute each instruction. 23:27:19 although they'd have to be very careful about what happens to the registers 23:27:40 like, if you know your typical workload is going to have >10 threads, you can basically give up the current generation of CPUs, go towards something simple like an early ARM (in-order 1 or 2 instructions per cycle), add hyperthreading and lots of cores 23:28:13 It seems like it would be better to move the complexity from the CPU into the compiler. 23:28:15 and then your main design problem becomes cache line coherency between 10's of cores 23:28:50 ais523: "x86 internal design is moving in the direction of trying to convert code into that form automatically via static analysis" -- it's not really static analysis, it happens mostly dynamically a few instructions ahead I think. also, it's not only x86 that's doing that, but some other modern cpus like arm 23:29:11 Like, maybe you could make it so that each CPU has its own instruction set, and there's just a small common core supported by the entire family. 23:30:02 "It seems like it would be better to move the complexity from the CPU into the compiler." => that was the idea of ia64. it failed because business only wants a cpu that can run the software they write NOW faster, rather than a cpu that will run the software you develop 8 years in the future faster. 23:30:20 tswett : main problems with that is that it's hard for a compiler to guess which memory loads will land in L1 cache and which ones are going to land in L2 cache 23:30:21 mad: this is why aliasing needs to be efficient too 23:30:29 b_jonas: we've discussed this before in #esoteric 23:30:33 (that's why x86 and arm are so bundled with historical compatibility.) 23:30:40 other theories as to why it failed include "the concept was a good idea, but the actual implementation was insane" 23:30:51 * APic thought Itanium was the Approach with static Analysis. 23:30:59 and "it was released before someone had produced a good compiler for it" 23:31:05 ais523: I don't know, luckily I don't know much about ia64. it might have failed for other reasons too. 23:31:06 I don't think itanium failed because lack of x86 compatibility 23:31:19 apparently, many compiler vendors put out a "minimum that works" compiler rather than one that did the analysis properly 23:31:35 that was excessively cautious to the point of absurdity 23:31:36 Then each CPU also has some machine-readable description of its instruction set (good luck with that) which compilers can use to produce something actually, like, fast and good. 23:32:02 what really killed itanium is that they could never get it to really be faster than x86 23:32:15 Yah. 23:32:29 -!- lambda-11235 has joined. 23:32:39 except maybe for floating point but itanium was mainly used in servers so good floating point perf was useless in that setting 23:33:04 floating point on servers isn't unheard of, but they tend to be pretty specialized servers 23:33:10 often computation-as-a-service 23:33:26 ais523: did ia64 have a cpu software architecture (that is, instruction set) that made sense now but would not have made sense 6 years later, like the delay slots in MIPS? 23:33:28 if you're going to run code that's not numerically heavy, then there are really only 2 designs 23:33:39 -!- Lilly_Goodman has quit (Ping timeout: 244 seconds). 23:33:44 b_jonas: I don't think it made sense even at the time 23:33:47 hehe 23:33:48 ok 23:33:52 so many weird edges 23:34:02 (1) the load is threadable: SPARC (as many simple cores as possible on a chip) 23:34:03 ais523: Why not have a programming language with one instruction: Upload the following string to a server via HTTP and execute it in some minimal language 23:34:16 1-instruction RISC TC 23:34:33 (No one bring up RSSB or SUBLEQ, as those aren't RISCs) 23:34:39 SUBLEQ 23:34:46 vanila: I hate you. 23:34:49 :-) 23:34:53 hppavilion[1]: Last ReSort? 23:35:13 (2) the load is not threadable: humongously complex out-of-order cpu in the style of the Haswell and all PentiumPro descendents. This is what intel is good at, and what x86 is less disadvantaged at (basically, intel wins). 23:35:36 so that language is basically another language 23:35:37 great 23:35:38 one instruction that takes no arguments, unknown TCness 23:35:41 also, see IRP 23:35:44 I want to make a language that looks like an ASM, but has subtle high-level mathematical features 23:35:51 For example, you can mutate the IS 23:36:21 Itanium failed because it can't delay part of the instruction stream if one load falls into L2 instead of L1 23:36:31 mad: well the situation nowadays is that most loads /are/ threadable but people don't thread them because it wouldn't gain on x86 23:36:54 for example, in general, there's no reason why a compiler can't optimize all functions in parallel, but I'm not aware of any compiler that does 23:37:00 if they are threadable, they WOULD gain on x86 no? 23:37:08 not by enough for people to care 23:37:37 mad: when you say "delay part of the instruction stream" you mean to skip ahead to executing non-dependent instructions? 23:37:47 I think there are plenty of reasons why a compuiler can't optimize all functions in parallel 23:37:50 (fwiw, Last ReSort's instruction is "p = (*p)++") 23:37:56 coppro : basically yes 23:38:12 coppro: there are various ways to view the same thing, that's one way to explain it 23:38:28 incidentally, this is also an operation that GPUs are good at 23:38:28 -!- Lilly_Goodman has joined. 23:38:41 in GPU programming, reading/writing main memory is something you do explicitly, normally in a multithreaded way 23:38:48 and the threads get suspended while they're waiting for the value to turn up 23:38:49 in a PentiumPro-descended cpu, each cycle it finds the earliest instructions in the instruction stream that are "ready to execute" 23:39:05 (main GPU memory, that is; the alternative is block memory, which is basically your cache) 23:39:14 (except it's managed explicitly) 23:39:22 if you have one load that unexpectedly falls in L2 or RAM or has a TLB miss then it keeps doing pretty much everything that doesn't depend on that load 23:39:22 ais523: that's the good situation. the bad situation is when people care too much about threading, and prematurely implement all their small functions to use threads, when they will actually want to run so many of the whole high level processes at the same time anyway that just the non-idle high level processes alone are enough for as much threading as the hardware can do, and the low-level threading just makes everything slower. 23:39:40 \ when they will actually want to run so many of the whole high level processes at the same time anyway that just the non-idle high level processes alone are enough for as much threading as the hardware can do, and the low-level threading just makes everything slower. 23:40:00 b_jonas: well the extreme case is that you use reconfigurable hardware, and quickly throw up a hardware implementation of your low-level code that has all the forks as literal forking wires 23:40:08 (this is basically what my day job is about) 23:40:32 ais523: as in an FPGA array? 23:40:35 considering that chips have more and more dark silicon, a scenario similar to this will probably play out 23:40:36 b_jonas: right 23:40:39 I see 23:40:47 ais523: that's definitely not what _my_ dayjob is about 23:40:59 mad: "dark silicon" = components that aren't being used for anything at that moment? 23:41:02 I may use ordinary threading for my dayjob, when it's necessary, but no FPGA stuff 23:41:05 ARMs already have cheap in-order cores and expensive out-of-order cores on the same chip 23:41:08 @metar FPGA 23:41:08 No result. 23:41:15 meh. would've been nice. 23:41:19 ais523 : sections of the chip that are literally powered down 23:41:41 ais523 : because the chip can only output so much heat so it dynamically selects which parts to power down 23:42:04 that's one way to deal with heat dissipation issues, I guess 23:42:53 ais523: a specific case I met is ffmpeg automatically choosing to encode a video using about as many parallel threads as the machine has hardware threads, which was like 24 on a server, and I was running about 16 video encoders in parallel, 23:43:07 you could have a cpu with one complex out-of-order core, and tons of simple in-order cores 23:43:18 if your load is threaded it uses the in-order cores 23:43:23 so not only did the threading now speed up the encoding, it also ran out of memory because using multiple threads in the encoder requires more memory. 23:43:23 mad: that's basically whta a CPU+GPU combination is 23:43:39 b_jonas: why not just run them in series? 23:43:52 ais523 : well, gpu is a different thing 23:44:05 This was a silent bug on the workstation I tested, because that computer had only like 4 cpus, so it was unexpected on the server. 23:44:18 ais523: the incoming data was generated in parallel 23:44:19 gpu is used for very different things than sparc-style "tons of in-order cores" 23:44:23 -!- nooga_ has quit (Read error: Connection reset by peer). 23:44:45 anyway, I think FPGA implementations of C-like software typically have less heat output per transistor than CPU implementations 23:44:48 Once I realized what was wrong, it's easy to solve: there's an option to explicitly tell the number of threads to use. 23:44:58 because which parts of the chip are in use depend on the instruction pointer 23:45:03 GPUs work because they run very numerical code that does tons of floating point multiplications 23:45:29 ais523: sure, but such implementations are more difficult to create 23:45:30 and also GPUs work because the memory writing patterns are known beforehand 23:45:48 -!- Lilly_Goodman has quit (Excess Flood). 23:46:18 ais523 : oh? I've never seen stuff like that actually 23:46:24 -!- Lilly_Goodman has joined. 23:46:33 \ when they will [...] <-- none of that actually got cut off in the first place hth 23:47:31 oerjan: I can't count bytes together with irc headers in my head then 23:47:32 -!- Lilly_Goodman has quit (Excess Flood). 23:47:53 I just guesstimate it 23:48:06 -!- Lilly_Goodman has joined. 23:49:50 -!- nooga has joined. 23:51:25 I think that if you designed a cpu for running standard single-threaded C++ code, it would probably be very similar to a MIPS even now 23:51:50 -!- digitalcold has quit (Quit: Reconnecting). 23:51:57 -!- digitalcold has joined. 23:52:54 mad: that was backwards. cpus were like MIPS when C was born, and C was designed to be easy to compile so originally C contained only such operations as builtins that the cpu can do easily. 23:53:29 possibly with some concessions to either CISC (ie something like an AMD Athlon but without the x86 encoding insanity), or some concessions to VLIW, or concessions to both (ARM is basically a mix of all 3 philosophies) 23:54:26 -!- p34k has quit. 23:54:28 (That's before C gained support to copy struct values.) 23:55:14 b_jonas : cpus were more like x86 when C was born no? 23:55:23 rather than mips 23:55:43 mad: same thing at that level. consider the 8086, not the modern x86. 23:56:54 dunno, I think the 8086 has lots of weird stuff that doesn't translate well to C 23:56:59 like segment registers 23:57:22 multiple aliases of the same register with different sizes (AL, AH, AX, later EAX) 23:57:31 weird instructions like XLAT 23:57:41 string manipulation instructions 23:59:14 https://www.youtube.com/watch?v=pxh-Hjj8T9o 23:59:19 if you look at other architectures of the time, they're even less C-like 23:59:26 like the 6502 or the z80 23:59:39 if C was made for those, it would have a zero page 23:59:44 mad: but those cpus aren't what C was ran on