00:00:05 elliott: you _could_ use build >:) 00:00:09 i assume. 00:00:14 anyway, traversing the whole thing is probably the best because of the 90% case 00:00:22 i.e. exactly one element satisfying the predicate 00:00:42 anyway you don't need to construct the list, either. 00:01:12 oerjan: oh, I see 00:01:53 elliott: traverse it; remember the first element that passes you encounter with a 1/1 chance, then if you encounter a second, replace it with that with a 1/2 chance, then a 1/3 chance, etc 00:01:59 I know 00:02:03 the last element you end up with will be random and equally weighted 00:02:11 ais523: yep that's what i was thinking 00:02:25 but I suspect that performs badly for the common case 00:02:31 -!- tzxn3 has quit (Ping timeout: 240 seconds). 00:02:46 the thing is that if i pre-traverse, I can avoid doing /any/ RNG generations 00:02:56 I don't think GHC's RNG is fast 00:03:17 elliott: except for the final index, i assume... 00:03:28 elliott: that ends up well for the common case 00:03:30 oerjan: huh? 00:03:39 I meant I can avoid it if there's only one satisfier 00:03:41 if there's only one element, you don't RNG call, you only need an RNG call for the second 00:03:56 hmm, OK 00:04:00 it's the rare case where it's bad, as it uses O(n that satisfy predicate - 1) RNG calls 00:05:10 now i'm wondering however, if there's a way to do this only selecting n random bits where 2^(n-1) < length of list <= 2^n 00:06:49 or i mean, using just a single RNG number in some way, changing its interpretation as you discover more elements 00:07:10 oh hm 00:07:35 there's that usual problem with 1/3 not being k/2^i 00:08:33 wait, this is essentially a fisher-yates shuffle, except you're only keeping the first element. 00:10:05 something smells kind of fisher-yatesy to me 00:10:49 I was surprised that Fisher-Yates even had a name, it was so obvious to me 00:10:57 (I implemented it myself before I'd ever heard of the algo having a name) 00:11:25 oerjan: come on that was even worse than yours 00:11:47 Well, the reflexive property of equality has a name, too. 00:12:55 is it the reflexive property of equality 00:14:09 tswett: How did you manage to write ///? Did an angel beam down and give you the spec? 00:14:32 elliott: maybe; I don't remember. 00:14:54 tswett: SUSPICIOUS. 00:15:17 I mean, I didn't do it on purpose. 00:15:36 What's the cutting edge in /// technology, anyway? 00:16:28 tswett: ask oerjan, he invented most of it 00:16:30 http://esolangs.org/wiki////#Simpler_counter, http://esolangs.org/wiki////#Bitwise_Cyclic_Tag_interpreter 00:16:46 hmm, I think oerjan is the main esolang programmer here, in that he does more ground-breaking actual programming in esolangs than anyone else 00:16:48 http://esolangs.org/wiki/Truth-machine#itflabtijtslwi is the latest program. ok not strictly /// 00:17:01 there's also http://esolangs.org/wiki/Itflabtijtslwi#Examples 00:17:09 yay! 00:17:19 tswett: but probably http://oerjan.nvg.org/esoteric/slashes/bct.sss and its generator http://oerjan.nvg.org/esoteric/slashes/BCT.hs are the most impressive things 00:17:20 also the deadfish one 00:17:45 oerjan: i linked that 00:17:54 oh, I didn't 00:17:54 http://esolangs.org/wiki/Deadfish#itflabtijtslwi 00:18:02 * elliott thinks BCT is more impressiv 00:18:03 e 00:19:16 oh, I thought you meant there was a truth-machine in BCT 00:19:22 that surely can't be very hard 00:19:41 well yes. although the difficult parts are different, with the BCT the hard thing was encoding things as /\, for Deadfish i had to get arithmetic including printing 00:21:04 it's much easier to do /// with more characters, most of the programs in that style are made "by hand" 00:21:14 ais523: BCT doesn't have input 00:21:18 so that would be exceptionally hard 00:21:21 (modulo a little vim substitution) 00:21:30 elliott: languages that don't take input get to do it by having the input encoded into the program 00:21:41 so you'd want two programs, one with a 0 and the other with a 1, that were otherwise the same 00:21:41 oerjan: you know, we would have cnosidered BCT impressive even without the \/ thing :P 00:21:48 heh :P 00:21:53 and did truth-machine behaviour 00:22:03 elliott: the \/ thing makes loops easier to write, I think 00:22:10 i don't think so 00:22:26 You know, I would slightly expect a quoted program in /// to contain no slashes of either direction at all. 00:23:25 ais523: um no. the \/ loops are precisely like the other loops, except for choice of encoding of tokens 00:23:41 ah, OK 00:24:02 only the first looping program was essentially different 00:25:00 oerjan: btw have you thought about the asymptotic complexity of ///? 00:25:05 e.g., how much slower it is at doing things 00:25:08 using a different and much less efficient method for removing the quoting. 00:25:24 since obviously it isn't equally "fast" as brainfuck or the like 00:25:37 I... the Python standard lib includes Turtle? 00:26:00 so does logo's! 00:26:09 elliott: hm. well i have thought that a more efficient implementation could avoid checking substrings that obviously don't match and such things, and so get better asymptotic behavior 00:26:42 Looking up Logo just gives me Sburb flashbacks, 00:26:54 like we've discussed before, just not restarting at the beginning of the string every time would help 00:28:11 What if you assume that every substitution takes time 1? Can it do things as fast as... 00:28:18 What *is* our standard for speed, anyway? 00:29:30 oerjan: right, I meant more in terms of how slower it is at common tasks 00:29:33 An FSA with a couple of registers, each capable of storing arbitrary integers, attached to some RAM indexed by the integers, with each storage spot capable of storing... an integer, maybe with a size restriction? 00:29:38 like arithmetic, and sorting 00:29:54 tswett: our standard is something like a machine equipped with arbitrary indexing into an array of bignums 00:29:55 and while loops 00:30:01 as far as complexities go 00:30:07 arithmetic is O(1), etc. 00:30:29 [[Hindley-Milner]] is the worst-written thing ever. 00:30:53 But isn't that machine capable of doing arithmetic in constant time? 00:30:53 Phantom_Hoover: on our wiki, or on wikipedia? 00:30:59 WP. 00:31:04 (Yes, because you said so.) 00:31:15 tswett: yes 00:31:22 tswett: which applies to standard complexity analysis too 00:31:29 it's on my watchlist, it's been rewritten a lot lately but it may be getting worse rather than better 00:31:32 Phantom_Hoover: looks ok to me 00:31:50 Look at the 'syntax' secion. 00:31:52 I guess the word "arithmetic" can apply to two different properties, though. 00:31:53 *section 00:32:01 "Perhaps a bit irritating, type variables are monotypes, either." 00:32:01 actually it was split from type inference, sort of 00:32:29 Er, problems. 00:32:50 Either the one where you have the numbers in your registers already, or the one where you're just given individual digits and have to calculate with those. 00:33:00 Then again, that still allows you to do multiplication in linear time... 00:33:23 "^ Luis Damas (1985): Type Assignment in Programming Languages. PhD thesis, University of Edinburg (CST-33-85) 00:33:23 " 00:33:31 I want to stab whoever wrote that citation. 00:34:02 edinburg 00:34:03 stab them with a bagpipe 00:34:16 hm 00:34:20 *your bagpipes 00:35:13 what you may not realize is that all the mistakes are intentional and the whole article is a troll 00:35:14 Phantom_Hoover: wherefore? 00:35:15 hey, did we ever decide on a slogan for the wiki? 00:35:30 solider than thou 00:35:41 -!- Jafet1 has joined. 00:35:52 tswett, because there is no University of Edinburg. 00:36:09 there is, it's in helsinki 00:36:14 There's a University of Edinburgh, which Luis Damas went to. 00:36:24 Hm, yeah, that's true. Plenty of Edinburgs, but no Edinburg has a University of it. 00:36:26 which "a" Luis Damas went to 00:36:39 http://en.wikipedia.org/wiki/Edinburg,_Texas 00:36:49 The fact that this is a place sears at my very soul. 00:37:14 hm i think if you assume a substitution takes time 1, then /// should be able to do as well as a minsky machine. 00:37:16 I can just hear Americans saying "Edinburg" over and over and over and over 00:38:31 I know I couldn't understand that article no matter who it was written by. 00:38:31 -!- Jafet has quit (Ping timeout: 240 seconds). 00:38:57 oerjan: so, not very well then :P 00:39:13 because you don't need your unary registers to do more than a constant number of substitutions per step 00:39:35 oh hm wait 00:39:51 but an actual minsky machine interpreter would be slower, right? 00:39:55 actually i think you can also get a TM 00:39:57 because it needs its own main loop around every operation 00:40:42 elliott: you can have data that isn't copied through the main loop mechanicm 00:40:43 *s 00:41:01 hmm, ok 00:41:05 this is one of the advantages of not coding solely with \/, btw 00:41:40 as if we needed more :P 00:42:43 Can everything that can be written using \, /, and two other symbols be written using \, /, and one other symbol, with only a constant penalty? 00:42:50 but anyway, i think it can be asymptotically comparable to a TM as well. 00:43:27 tswett: hm that's not obvious, i think 00:43:41 reducing anything else down to 2 is though 00:44:03 oerjan: btw my intention is that a loop replacement would _not_ be considered O(1) 00:44:07 since you can infiniloop with only a single one 00:44:24 -!- Phantom_Hoover has quit (Read error: Connection reset by peer). 00:44:45 or did you mean a single replacement? 00:44:49 in which case it's still not O(1) :P 00:44:54 elliott: fine, i think it's still asymptotically equal 00:44:56 ok 00:45:02 that's surprising 00:45:06 although I guess TMs are still pretty slow 00:45:15 elliott: er i wrote that before your last line 00:45:23 -!- derdon has quit (Remote host closed the connection). 00:45:36 ah 00:45:58 i went with tswett's suggestion that substitutions should be considered O(1), although only single replacements are needed for what i thought of 00:49:43 Terminus - a terminal emulator with support for inline HTML (github.com) 00:49:45 that's a new one 00:50:30 tswett: with only one symbol there's no way to separate symbols without using \ or /, which means you cannot do copying of non-unary data without the quoting mechanism 00:50:48 -!- Frooxius_ has joined. 00:51:03 so my hunch is it is less efficient 00:54:38 -!- Frooxius has quit (Ping timeout: 260 seconds). 00:54:45 -!- Frooxius_ has changed nick to Frooxius. 00:55:05 -!- ais523 has quit (Remote host closed the connection). 01:07:12 -!- cheater_ has joined. 01:09:07 -!- Vorpal has quit (Ping timeout: 276 seconds). 01:10:51 -!- cheater__ has quit (Ping timeout: 260 seconds). 01:13:57 oerjan: you! quick! site tagline! 01:16:22 elliott: "solider than thou", i said! 01:16:52 oerjan: you did? 01:16:57 yes. 01:17:24 or wrote, to be precise. 01:17:45 ok. your suggestion will be considered. 01:17:48 -!- augur has quit (Remote host closed the connection). 01:17:51 your suggestion has been considered and rejected. 01:18:10 at least the bureaucracy worked quickly. 01:18:59 helps that there's only one member 01:19:14 "Computational madness" 01:21:13 "It's computation Jim, but not as we know it" 01:22:03 "Asymptotic incomprehensibility" 01:22:21 -!- azaq23 has quit (Remote host closed the connection). 01:22:47 before i asked oerjan, i was sure "Weirder Than You" was the worst possible subtitle 01:23:00 ;_; 01:24:02 "Is bubble-wrap Turing-complete?" 01:26:52 "Tea for Thue" 01:29:17 i sense the customer has not specified the task properly. 01:30:00 It really helps a lot when someone just blurts out an incomprehensible soundbyte like enjoy your matrix of solidarity 01:30:26 but he's already rejected that theme :( 01:31:43 (i know i probably didn't quote it perfectly) well looking at that sentence.. part of the fun is he said "enjoy your" ... implying some antagonism 01:32:34 "Trying to out-weird the other kind of esoteric" 01:32:51 elliott: ^ 01:33:36 -!- kwertii has joined. 01:33:40 it's essentially an esolang meme. 01:33:58 and we all know how much elliott loves memes. 01:34:20 "Esoteric languages for fun and profit. Wait, scratch profit." 01:34:21 im not suggesting we use it.. im just analyzing it 01:36:13 `quote treeder 01:36:21 296) enjoy being locked in your matrix of solidity 01:36:49 wow... such powerful words 01:37:20 they're obviously from the other kind of esoteric. 01:38:46 `pastelogs [<]treederwright> 01:39:17 i doubt there's more, e didn't stay long. 01:39:19 No output. 01:39:31 `pastelogs [t]reederwright 01:39:42 It really helps a lot when someone just blurts out an incomprehensible soundbyte 01:39:51 It wasn't really "blurted out" 01:39:53 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.3800 01:39:59 He was spouting nonsense the whole time he was here. 01:40:13 ahh,,, now i see 01:42:12 back 01:42:40 "Trying to out-weird the other kind of esoteric" 01:42:40 elliott: ^ 01:42:43 oerjan: guess what 01:43:01 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 01:43:03 Friendship: It was his parting shot, though. 01:43:18 * oerjan cannot take the suspense 01:43:45 Yup 01:44:19 I'm still kinda uncomfortable with being the representative of friendship. 01:44:21 oerjan: http://uncyclopedia.wikia.com/wiki/AAAAAAAAA! 01:44:28 elliott: there were others above, including one by itidus21 01:44:42 oerjan: they all sucked 01:44:42 oerjan: that wasn't serious 01:44:56 hehe 01:44:56 ion: http://esolangs.org/wiki/AAAAAAAAAAAAAA!!!! 01:45:02 elliott: except that one, right? 01:45:50 “If you type a line beginning with @ it can be a comment and contains anything, but it must be removed from the program before the interpreter can use it.” So… just like Haskell? 01:46:30 elliott: i have no idea why the suck, which means i have no idea what you could possibly consider not sucking. also i get a deja-vu. 01:46:33 *y 01:49:29 also, i think the deja vu would be complete if you rageparted just about now. 01:51:09 "Programming made wrong" 01:51:43 "And you thought PHP was bad" 01:52:55 "Distilling the suck from success" 01:53:25 oerjan: they're all trying too hard :p 01:53:53 "Because, meh." 01:54:18 PHP is awesome: http://www.reddit.com/r/lolphp/comments/ps6x5/0x0_wat/ 01:54:42 elliott: dammit why do you ask me if you want something without a joke in it 01:54:43 out of everything I've heard my favorites are still "Irrelevant" and "hello" 01:55:04 "Your site for esoteric programming languages" 01:55:05 "We spent hours deliberating on a slogan" 01:55:19 that one (itidus') is good too 01:55:32 it's self deprecating 01:55:41 i am still a fan of "stop using cologne blue" 01:55:49 ooh also good 01:55:58 what is cologne blue 01:56:07 the only skin the subtitle shows up in 01:56:18 aha 01:57:20 i must have out-aged today's sense of humor. :( 01:57:33 We should call it Java. 01:57:39 "Java." 01:57:55 oerjan: :D 01:58:46 "Insert tagline here" 01:58:48 "T.A.G.L.I.N.E." 01:59:03 it's technically the "subtitle" btw 01:59:19 "title" 02:00:08 "There is more than one way to skin a wiki" 02:00:32 oh it's called the "tagline" too 02:00:44 "Tag! You're it!" 02:01:03 "" 02:01:05 oh hm 02:01:10 http://esolangs.org/wiki/MediaWiki:Tagline, http://esolangs.org/wiki/MediaWiki:Sitesubtitle 02:01:26 does tagline show up anywhere 02:02:01 "DNS is Not a Subtitle" 02:02:28 itidus21: upvoted for trut 02:02:30 h 02:03:43 "Second only to Haskell.org as a MediaWiki Wiki" 02:03:46 "esolang" 02:03:51 "Why are you reading this anyway?" 02:03:58 "cologne blue" 02:04:12 "yes" 02:04:17 "moscow red" 02:04:50 "Open on Fridays" 02:05:16 "Rumour has it this is a wiki about esolangs" 02:05:30 "diabolical" 02:05:41 "This subtitle was an unfortunate victim of a bikeshed accident" 02:05:42 "looking ghostly" 02:05:51 *the 02:06:14 "no" 02:06:26 "The Revenge" 02:06:26 "Surprisingly often covered in tree sap." 02:06:29 "The site with the brick Phantom" 02:07:09 "Let it Be" 02:07:18 "Wikipedia" 02:07:23 + 02:07:25 *+1 02:07:39 hahahahha 02:08:27 Esoteric "Two Sheds" Programming Wiki 02:08:29 "Sponsored by RIAA" 02:09:04 "ok" 02:09:16 "The" 02:09:53 +1 02:09:59 "Build your own private cloud with microsoft technology" 02:10:41 "The wiki with its head in the cloud" 02:11:13 My vote is still for "Wikipedia" 02:11:18 Or "Surprisingly often covered in tree sap" 02:11:34 "Wikipedia" is very good 02:12:28 "Wikipedia, the" 02:13:47 "Trying too hard" 02:14:45 "oh" 02:15:32 "A new translation of War and Peace" 02:16:20 "43" 02:16:40 wait, detroit is in michigan? 02:16:42 -!- augur has joined. 02:16:54 new proposal "Wait, Detroit is in Michigan?" 02:17:01 "Detroit is in Miching dammit 02:17:46 "Michigan's largest website" 02:18:23 largest web shite 02:18:41 diabolical 02:19:01 "Wikipedia is surprisingly often covered in tree sap." 02:20:05 `quote tree sap 02:20:08 No output. 02:20:15 shocking 02:20:22 `pastlog tree sap 02:20:36 2011-01-07.txt:17:09:34: j-invariant: then pick up the little tree saplings 02:20:50 `pastlog covered in tree sap 02:21:01 No output. 02:21:04 shocking 02:22:24 why do i still have the feeling i've seen it before? 02:22:45 "Why do i still have the feeling i've seen it before?" 02:22:54 "Shocking" 02:23:03 `pastelogs [t]ree sap 02:23:12 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.10941 02:23:32 oerjan: Because you're surprisingly often covered in tree sap? 02:23:48 `pastelogs [t]ree 02:23:53 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.28614 02:24:20 monqy: what do you think of "Wait, Detroit is in Michigan?" 02:24:22 `pastelogs surprisingly often covered 02:24:30 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.4902 02:24:39 elliott: I can't tell if I like it or not 02:24:48 `pastelogs surprisingly 02:24:48 it's very mysterious like that. 02:24:55 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.7250 02:26:31 `pastelogs unsurprisingly 02:26:38 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.15661 02:29:48 2010-04-29.txt:14:50:44: Misread an Amazon title recommendation as "Purely Fictional Data Structures". (Unsurprisingly, they were functional instead. I might have bought a book on fictional ones.) 02:31:45 Black and blue trees 02:31:51 fizzie doesn't own Okasaki. :( 02:40:52 elliott: you're trying to come up with a slogan for Esolang? 02:42:04 I suggest "Ellenikö va ruoda he milapaa sty evästäkkä puola märri to." 02:45:49 google translate was surprisingly useless on that one 02:46:01 indeed 02:46:49 as is bing translator 02:48:00 It’s Finnish for “Ellen spouted her fecal matter all over the kitchen floor.” 02:48:25 i am not in any way perturbed when an online translator fails :-D 02:48:57 its more the successful feeling when a human beats a non-human at chess 02:49:16 That seems easy to arrange. 02:49:22 Have the computer make moves randomly. 02:49:28 Better yet, play against a rock. 02:49:43 It’s even more impressive when three fifths of a human beats a non-human at chess. 02:51:17 -!- zzo38 has joined. 02:51:18 impressiveness increases as fraction of human approaches zero 02:52:04 Using the limited RAM available in NES, how much of Thue-Morse sequence could be generated at runtime by using a short program? 03:03:55 -!- amca_ has joined. 03:04:47 -!- TeruFSX has quit (Read error: Connection reset by peer). 03:05:30 -!- TeruFSX has joined. 03:08:22 It’s Finnish for “Ellen spouted her fecal matter all over the kitchen floor.” 03:08:24 Seriously? 03:09:07 that's not bad for a tagline 03:10:28 elliott: Nope, it’s either autogenerated words using a Markov chain from a Finnish dictionary or some other language that looks like autogenerated words using a Markov chain from a Finnish dictionary. 03:11:12 You disappointed me. 03:11:36 Kaksikymmentäneljätuntiaikakausitämänhetkinen will be the day you die. 03:12:23 Ellenik vuotanut hnen ulosteessa koko keittin lattialle. 03:14:55 I have heard that the policy of credit card companies that they are not allowed to discount to customers who pay cash. But I have another idea: After pay, the store owner offers 50% refund if the customer wins at a game against the store owner. And the store owner will ensure to win if paid by credit card, and lost (ensuring customer win) if paid by cash. 03:15:44 What would happen if they did that? 03:16:33 elliott, update 03:21:34 -!- amca_ has changed nick to amca. 03:24:35 are there no finns awake? :( 03:24:54 What timezone are you in??? 03:25:09 est but i was here earlier! 03:25:26 besides, i know there are latenight finns 03:25:35 I’m about to go asleep. 03:26:27 augur: All you use this place for anymore is asking for Finns, right? 03:26:43 well, finnish IS an esoteric language 03:26:43 so 03:26:46 i figure its on topic 03:27:12 ion: are you a native finnish speaker 03:27:29 I promised elliott i wouldn’t say this, but yes. 03:27:48 :X 03:27:52 No, native Finnish speaker is OK. 03:27:58 Native resident of Finland is not. 03:28:05 ion: i just need a yes/no judgement from you 03:28:09 Actually it doesn't matter whether you're native or not. 03:28:18 I judge: no. 03:28:22 ion: :P 03:28:25 finland, finland, finland 03:28:26 ion: on some finnish! 03:28:35 I bet augur doesn't have to do it kaksikymmentäneljätuntiaikakausitämänhetkinen. He could wait until tomorrow. 03:29:46 i can wait tho yes 03:29:52 ion: ill annoy you tomorrow. what time would be good? 03:30:00 That was a joke. 03:30:05 Feel free to ask now. 03:30:18 * elliott wonders if augur thinks "kaksikymmentäneljätuntiaikakausitämänhetkinen" is an actual word. 03:30:22 ill have to construct an example sentence and i dont want to stop you from going to sleep 03:30:47 I’ve been “about to go to sleep” for about five hours. :-P 03:31:08 I’ll probably actually do it now, but i’m in no real hurry. 03:33:45 ion: /msg 03:36:06 -!- Jafet1 has changed nick to Jafet. 03:41:06 Oh, we don't even get to see the sentence? 03:43:21 elliott: i have to annoy him and figure out what sentences are even useful to answer the question :P 03:43:27 so i dont want to spam the channel with that shit 03:55:00 -!- oerjan has quit (Quit: Good night). 03:57:38 http://heterodoxy.cc/meowdocs/pseudo/pseudosynth.pdf "A Simple and Convenient Synthesis of Pseudoephedrine From N-Methylamphetamine" 03:58:04 For science 03:59:04 "A quick search of several neighborhoods of the United States revealed that while pseudoephedrine is difficult to obtain, N-methylamphetamine can be procured at almost any time on short notice and in quantities sufficient for synthesis of useful amounts of the desired material." 03:59:13 "We expect that the simultaneous trends of restricting pseudoephedrine sales while N-methylamphetamine becomes less expensive and of higher purity will make the methods presented here increasingly attractive." 04:24:33 kmc: lolol 04:33:03 kmc: heh 04:33:09 In Haskell channel, someone said I made the same problem of including Int in Prelude. I agree and I realized I made a few other mistakes too, in Ibtlfmm example, so I will write the specification fix these problems. There shall be no Int, but there can be Int8, Int16, Int32, Int64, and Integer. Do you think so? 04:33:35 (And the corresponding unsigned types: Nat8, Nat16, Nat32, Nat64, and Natural.) 04:34:08 I’m not sure IntN, NatN belong to the Prelude either. In a separately imported module, sure. 04:36:25 Well, maybe... but I think Int doesn't belong anywhere; you have to use Int32 or whatever to specify the number of bits explicitly. But tell me your reasoning anyways; I would like to understand better what you mean any why you think it should be. 04:36:49 (It's already like that, in Data.Int.) 04:38:18 I’m just thinking the IntN, NatN types are used quite infrequently. 04:38:48 (set! lambda ((lambda (base-lambda) (vau (param . body) env (eval env (list base-lambda param (cons begin body))))) lambda)) 04:38:49 whee 04:39:26 elliott: I understand; what I mean is if it is make entirely new programming language. (One idea, of the name Nat8 instead of Word8 for unsigned 8-bit number) 04:40:17 kmc: What am i looking at? 04:40:25 -!- itidus21 has quit (Ping timeout: 252 seconds). 04:42:07 a computer 04:42:23 do i win a prize for guessing 04:42:55 the code is for a language i implemented, which is similar to Kernel 04:43:03 an fexpr / vau calculus sort of language 04:43:41 it redefines lambda to support the syntactic sugar (lambda (x) a b c ...) => (lambda (x) (begin a b c ...)) 04:43:44 * elliott doesn't like the explicit env thing much. 04:44:24 it holds the old lambda in a closure constructed by (what else?) lambda 04:44:52 elliott, do you have a proposed alternative? 04:45:13 i saw someone on LtU talking about pairing the arguments with the dynamic environment 04:45:19 to form a 'quasipromise' 04:45:55 no proposed alternative :P ... but one idea I had would be to carry environments with values 04:46:00 so "body" there would know its environment 04:46:06 so (eval body) would eval it in the right environment 04:46:09 maybe that's what you mean by that 04:46:12 yeah, that's what i was talking about 04:46:25 that makes it somewhat like a promise 04:46:38 except you can still crack it open and get at the juicy cons pairs inside 04:47:11 right 04:47:28 if you supported explicitly transforming environments of these values you could still do anaphoric stuff 04:49:32 yeah 04:49:45 in my interpreter i totally expose the fact that environments are lists of alists 04:49:59 which means there is no end of hax 04:50:14 i don't know what a sane abstract-data interface to first class environments would look like 04:50:31 this way is convenient because you can define 'define' and 'set!' in library code 04:50:49 all you need is mutation, access, and enumeration, really 04:52:53 all you need is love 04:53:11 maybe i should rename "vau" to "love" 04:54:04 Vau is Finnish for “wow”. 04:58:35 -!- amca has quit (Quit: Farewell). 05:22:04 Is this good so far? So far I have only the main headings. http://zzo38computer.cjb.net/Ibtlfmm/ibtlfmm_specification.tex Perhaps I might change the name; if you can suggest better name ("Ibtlfmm" is not necessarily best name to call it) 06:23:03 -!- cswords has quit (Ping timeout: 260 seconds). 06:25:28 -!- cswords has joined. 06:33:18 @tell ais523 yep, Yandex is violating /robots.txt: 87.250.255.243 - - [26/Feb/2012:06:30:56 +0000] "GET /w/index.php?title=Auo&action=edit§ion=6 HTTP/1.1" 302 161 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" 06:33:18 Consider it noted. 06:34:27 o.O 06:34:48 Some sort of third-rate search engine? 06:35:28 Third-rate = the top in Russia, or so they cliam. 06:35:29 *claim 06:35:45 Its documentation makes it seem like it's supposed to 06:35:46 http://en.wikipedia.org/wiki/Yandex 06:35:48 WP agrees. 06:35:57 http://help.yandex.com/search/?id=1112639 06:36:06 Is /w/ valid like that in robots.txt? 06:36:25 What do you mean "valid"? 06:36:28 It's a path on the server. 06:36:55 (Googlebot, bing etc. all respect the robots.txt I have just fine.) 06:37:08 *bingbot, I think. 06:43:13 You can just block Yandex at the router configuration if you need to 06:43:23 Or the server configuration 06:43:26 Whichever works 06:48:20 I know. 06:48:43 But then we'd be hurting all our Russian fans 06:49:16 We'd only be hurting the ones using that search engine. 06:49:24 Use some server configuration to block Yandex from /w/ only, then. 06:50:29 It's not just that they violate robots.txt; they also spider far faster than they should. 06:50:43 -!- MoALTz_ has quit (Ping timeout: 245 seconds). 06:53:59 -!- calamari has joined. 06:57:25 -!- MoALTz has joined. 07:45:04 -!- kwertii has quit (Quit: bye). 07:48:06 -!- Ngevd has joined. 07:49:17 hi Ngevd 07:49:27 Hello! 07:49:43 . Function application .ab... ...(λx.a(bx)) 07:49:46 i do not quite understand this 07:49:51 is it really meant to turn those two into a lambda? 07:49:56 Neither do I 07:49:57 surely it should be something like 07:50:09 (\x.y)b --> y[x:=b] 07:50:10 or such 07:50:11 I made the esolang when I was pretty much asleep 07:50:13 using substitution syntax or something 07:50:22 also $ is kinda vague 07:50:40 $3. turns into ... 07:50:56 $6~ turns into ~~~~~~ 07:51:11 I'm not sure if I need . 07:51:17 I think I'll remove it 07:51:33 -!- monqy_ has joined. 07:51:54 -!- monqy has quit (Quit: Reconnecting). 07:52:03 oh, "a lots of b" 07:52:05 not "a lot of b" 07:52:27 If you can clarify that better, go ahead 07:54:00 yeah, I'm tweaking the article now 07:56:28 Ngevd: you have ! doing two things 07:56:39 Aaah! 07:57:13 Make the first one ? 07:57:50 That's not ASCII 07:57:51 FWIW 07:59:05 Ngevd: If you're fixing it, refresh 07:59:07 (I edited the page) 08:01:01 Ngevd: You did not fix the example. 08:01:37 Refresh 08:06:16 Yay. 08:06:39 You forgot to add it to your userpage. : 08:06:39 :p 08:06:53 I'll do that later 08:08:33 Have I just made the esolang with the longest sequence of vowels in a non-onomatpic title? 08:10:03 (By the way, later has already happened) 08:12:56 Ngevd: Dude. 08:12:59 You misspelled it on the language list. 08:13:26 Blerg 08:13:28 Either that, or in the page title. 08:14:13 No, the language list 08:14:21 It's based on the word "queue" 08:14:34 And I misplaced it 08:17:38 -!- monqy_ has changed nick to monqy. 08:18:21 hi monqy 08:19:34 * Sgeo wonders if he should be upset that http://common-lisp.net/project/cl-monad-macros/monad-macros.htm uses macros like with-monad rather than having bind dispatch on the type. I'm not even sure how return could be made to work generically, so 08:24:44 You can't do return in a dynamically-typed language. 08:25:43 Pass it the class? 08:25:58 -!- calamari has quit (Quit: Leaving). 08:26:24 Yes, that's what you have to do to make it not the same and work. 08:27:44 * Sgeo is somewhat glad of monad macros in CL 08:28:13 And that was weird grammar 08:28:13 -!- Ngevd has quit (Quit: Goodbye). 08:32:40 "So that's it: A monad is a code-transformer. Like a macro. It's simple to remember: Both names even start with a 'M'." 08:32:51 Blood is coming out of my gums for having read that 08:33:01 http://kawagner.blogspot.com/2007/02/understanding-monads-for-real.html 08:33:37 Oh, e says that they're not really macros 08:33:40 >.> 08:33:50 "I put the '' around the word 'macro' because Monads are not really macros by definition. So if you want to be picky you can find reasons why this picture isn't totally correct. But does this really matter? Or isn't it more important to have a useful way of thinking if we deal with an abstraction?" 08:34:54 thank you for telling us about this article. 08:35:20 http://kawagner.blogspot.com/2007/02/why-monads-are-evil.html 08:35:45 Slava Pestov said... 08:35:46 If Lisp and Haskell are too powerful for you and your fellow web developers, stick to Java. But don't waste your time posting ignorant tripe. 08:35:46 6:14 AM 08:42:20 elliott, read Karsten's thoughts on undo/redo 08:43:36 Although I am a bit disturbed at what wellsed said 08:44:01 "It is an undecideable problem to determine a Haskell program's 08:44:01 evaluation order without actually evaluating the program. This is a consequence of the 08:44:01 non-strict semantics of Haskell; Haskell is the "standard non-strict, pure, functional language". 08:44:01 The decision for Haskell to be pure forces the necessity of its non-strict nature." 08:44:31 Pretty sure that non-strictness forces (or at least strongly indicates) purity, rather than purity strongly suggesting non-strictness. 08:45:16 Sgeo: I'm not going to read anything this idiot said. 08:45:37 @tell oerjan wow, your BCT interpreter was 2009? 08:45:37 Consider it noted. 08:45:51 Isn't the difference that... 08:46:14 Closures operate at runtime, and, operates on live values. 08:46:23 Macros operate at compiletime, and operate on code. 08:46:24 That... 08:46:29 Is a major difference, don't you think? 08:46:41 Esp in languages with state 08:48:49 The two concepts are pretty much unrelated, except that monads are a useful abstraction when defining EDSLs, and macros can also be used for EDSLs. 08:50:37 Also 08:50:44 Why are they pointing out monads 08:50:49 Instead of higher order functions again?? 08:51:16 The great thing about ignorant tripe is that everyone feels like they can contribute to a discussion of it. 08:51:28 When the best contribution would be a lack of discussion, of course. 08:51:37 =p 08:52:00 Esp in languages with state sometimes refers to the stack pointer. 08:53:49 -!- Ngevd has joined. 08:53:53 Hello 08:56:05 -!- cheater_ has quit (Ping timeout: 248 seconds). 08:57:06 -!- MoALTz_ has joined. 08:57:13 -!- cheater_ has joined. 08:59:51 -!- MoALTz has quit (Ping timeout: 260 seconds). 09:00:22 shachaf: Did you know that Haskell is just mathematical notation? 09:00:55 Aaaaaargh 09:01:24 I'm playing VVVVVV, just did the whole Doing Things The Hard Way, but landed on the wrong side of the block,... 09:07:39 VVVVVV was fun. 09:07:40 Though 09:07:55 I went "you want me to do WHAT" when it started off an escort mission... 09:13:06 Do you want to define a monad using join instead of bind? 09:13:23 Who, me? 09:14:38 Ngevd: Whoever answer, so, that can include you 09:14:59 It could be useful to have the option and oh god I'm Ngevd 09:15:01 -!- Ngevd has changed nick to Taneb. 09:17:05 Have you considered just changing your name in your client. 09:17:16 I've tried to. Twice 09:17:35 -!- Phantom_Hoover has joined. 09:17:38 Try harder. 09:17:38 Did you read the documentation for your client? 09:17:51 It doesn't seem to stick 09:17:54 Hang on 09:17:56 -!- Taneb has quit (Quit: Goodbye). 09:18:11 -!- Taneb has joined. 09:19:21 zzo38, if it's easier for you to imagine join rather than bind, write oin 09:19:56 -!- Ngevd has joined. 09:19:57 -!- Taneb has quit (Read error: Connection reset by peer). 09:20:10 To me, bind is just a shortcut to combine join with fmap 09:20:42 -!- Ngevd has changed nick to Taneb. 09:20:46 That seemed to work 09:21:08 Except it didn't 09:21:11 What on earth did you do 09:21:14 Oh, I see 09:22:03 At least in the IRC client I use, nothing persists across sessions; you have to put your configuration in a init script. 09:24:20 There's a new I Wanna Be The Guy 09:24:22 Apparently 09:24:35 (The same thing applies in Astrolog; you have to put all your configurations in the init script) 09:25:46 Either that or enter the commands manually every time; both PHIRC and Astrolog do that. 09:47:04 ...There are two Helgi the Sharps on Wikipedia 10:04:07 -!- cheater_ has quit (Ping timeout: 265 seconds). 10:11:28 -!- zzo38 has quit (Remote host closed the connection). 10:39:04 -!- graue has joined. 10:39:17 Damn :( 10:39:26 hello #esoteric people 10:39:42 I'm failing to implement a program that compares two values in Beam :( 10:39:52 :( 10:40:11 hello graue 10:40:22 >-! is a loop that sets the beam to zero 10:40:30 but that only works, if beam % 3 is zero. 10:40:31 :( 10:41:13 >-! is executed >-!->-!->-! and so on 10:41:47 i don't know Beam yet 10:41:48 The idea would have been to decrement both values each at a time 10:41:55 and stop if one value reached zero 10:41:58 -!- Ngevd has joined. 10:42:01 -!- cheater has joined. 10:42:03 which would make that value the smaller of both. 10:42:10 sounds good 10:42:27 Except I have not figured out yet how to decrement 1 :) 10:43:18 hm 10:43:25 -!- Taneb has quit (Read error: Connection reset by peer). 10:43:30 -!- MoALTz_ has quit (Quit: brb). 10:43:49 -!- MoALTz has joined. 10:45:13 I can subtract even numbers with >--! 10:45:31 which is >--!-->--!-->--! 10:46:24 beam -= 2; while(beam != 0) { beam -= 4 }; would that bee. 10:46:29 -e 10:47:03 obviously that won't terminate if beam is not even. 10:48:58 >-! zeroes the beam, if the beam is odd. 10:49:08 >--! zeroes the beam, if the beam is even. 10:50:02 But I may be able to figure out how to test, if it is even or not. 10:50:23 that'd do it! 10:50:41 Yes. 10:50:52 But I guess I need loops for that too. 10:51:02 and so fall in to the same problem. 10:51:18 actually it is the same problem. 10:51:44 did you invent this language? 10:52:18 Somehow yes ;) 10:52:57 maybe it's impossible to do what you're trying to do 10:53:34 I think the language has all the necessary stuff to be turing complete 10:53:41 which means, that it must be possible somehow :D 10:53:59 I can test for 0 or 1 10:54:05 so that must be enough. 10:54:14 well, turing-completeness doesn't necessarily mean you can accomplish some operation with the primitive data types in the language 10:54:33 e.g., there may be a BF interpreter you can write that never needs to decrement 1, or such 10:54:48 yeah, i was thinking the same 10:55:11 or perhaps since you can test for 0 or 1, use only those values in your program, and represent larger numbers as bitstrings 10:57:24 At least I can test for (beam != 0) and (beam != 1) 10:57:38 instructions n and u 10:57:52 well if you only use 0 and 1, then (beam != 0) <=> (beam == 1), and vice versa 10:59:46 v v < 10:59:47 >+>-u: 11:00:03 That loop always zeroes the beam if the store is zero 11:00:40 Looking good so far. 11:06:39 hey guys! 11:06:50 i resurrected my weird 7 year old string-rewriting language, Sortle 11:07:12 and successfully wrote a fibonacci program in it after many hours 11:07:19 http://esoteric.voxelperfect.net/files/sortle/src/fib.sort check it out 11:08:34 the C interpreter was hopelessly buggy, so most of those hours were spent writing a new interpreter: http://esoteric.voxelperfect.net/files/sortle/impl/sortle.pl 11:08:52 that fibonacci looks cool 11:09:31 thanks 11:09:40 hmm, reminds me of Muriel, at least if that quoting /is/ the quiney-program-rewriting it looks like 11:10:06 \o/. 11:10:07 | 11:10:07 /`\ 11:10:30 /me refreshes memory on how Muriel works 11:11:20 looks like cpressey wrote a perl interpreter for sortle too, heh: http://catseye.tc/projects/muriel/script/muriel.pl 11:11:37 you mean for muriel? 11:11:49 muriel looks cool, but sortle is different 11:12:00 oh, oops 11:12:03 the code doesn't get modified 11:12:04 i completely forgot which article i was reading :) 11:12:12 -!- tzxn3 has joined. 11:12:26 Programming in Fueue is haaaard 11:12:30 http://esolangs.org/wiki/Beam#Even_.2F_Odd 11:12:34 Got it. 11:12:39 Tests even/odd. 11:12:44 congrats mRoman! 11:12:54 ^celebrate 11:12:54 \o| |o| |o/ \m/ \m/ |o/ \o/ \o| \m/ \m/ \o| |o| |o/ 11:12:55 | | | `\o/´ | | | `\o/´ | | | 11:12:56 /'\ |\ |\ | /'\ /< /< | /< /| /´\ 11:12:56 /`\ (_|¯`¯|_) 11:12:56 (_| |_) 11:13:34 Trick is to subtract two 11:13:40 and test for !=0 or !=1 11:14:12 So, if it's not 1 or 0, then subtract 2 again? 11:14:24 Yes. 11:14:35 Cool 11:17:47 elliott: so, in sortle, the only form of data storage is in expression names 11:18:21 and it can only be accessed by trying to match other expression names (not the expression being evaluated) with a regex 11:18:37 ah, I see 11:18:56 where does the sort part come into it? 11:19:07 execution order 11:19:27 at each step, the expressions are sorted by name 11:19:40 whichever one comes after the one that just got evaluated, is evaluated next 11:19:45 (wrapping) 11:20:00 ah 11:20:05 reminds me of Forte, in the execution order 11:21:07 i've only glanced at that one 11:21:08 Esolangs are so baaaad for code reuse 11:21:26 though the wiki tells me that sortle is a year older, so i win :P 11:21:29 Even if you were able to write a program to test for even/odd 11:21:34 you can't just use that code :( 11:21:53 because it assumes starting position and since it's 2d 11:22:03 it also assumes position in the code 11:22:18 *starting values 11:22:24 code reuse is terrible. you might build something useful 11:22:52 code reuse is for people who aren't cool enough to program esolangs 11:23:02 Ok. I get that. 11:23:21 I prefer to say that people who can't program esolangs, can't program ;) 11:23:30 damn right 11:23:41 *who can't program (in) esolangs 11:23:45 it also reminds me of Forte in that you "relabel" statements to get them to execute in the order that you want 11:23:53 (except in Forte you do it by changing the numbers themselves :)) 11:24:08 -!- cswords_ has joined. 11:24:27 whoa, cool 11:24:28 -!- cswords has quit (Ping timeout: 272 seconds). 11:24:42 so forte is "probably turing-complete", according to esowiki 11:25:02 well, you can do loops, it's just confusing 11:25:10 i'm very interested in whether sortle is turing-complete; i think that assuming unbounded length strings, it might be 11:25:24 probably BCT would be feasible; if it can be implemented in /// it can be implemented in anything 11:25:28 Loop until 99 becomes 2 11:25:31 that even looks insane. 11:25:39 but I suspect nobody has the patience :P 11:25:44 so i should implement BCT in sortle? 11:26:13 if it's any good at simple string manipulation, it's an easy way to prove TCness, yeah 11:26:16 oh 11:26:20 that is just pseudocode 11:26:35 mRoman: the actual language is worse, you have to reassign numbers to even loop 11:26:46 forte looks awesome, actually 11:26:55 i dig the idea of using numbers themselves as variables 11:26:57 graue: the one problem I could see for TCness is if regular expressions don't end up being powerful enough... but I don't think you'd need that to do BCT 11:27:24 A language like the pseudocode would have been cool. 11:27:52 my so-called regular expressions in Sortle are pretty weak 11:28:34 yeah, they're more like super globs :P 11:29:01 Sortle paper. 11:29:04 it definitely looks like it has enough freedom to be TC 11:29:23 * elliott is reluctant to call anything sub-TC after his series of terrible Underload predictions 11:29:48 so i guess the idea is to create bct.sort that somewhere in it has "replace this with BCT program string" and "replace this with BCT initial data string", and you replace them and then run it 11:29:55 graue: Did you invent Sortle for some sort of school project? 11:29:56 (every time oerjan tried to figure out whether another subset of Underload is TC I would insist it can't possibly be, but he proved me wrong every time :)) 11:30:00 or university project whatever. 11:30:09 and if the BCT program halts, the sortle program halts and produces the final data string as output 11:30:22 you don't need the output at all, really 11:30:24 mRoman: no, i just decided to create a .pdf of the spec for no reason 11:30:29 though it helps as a constructive proof that the computation is actually happening :) 11:30:54 well, in sortle, any program that halts has already thrown away all data EXCEPT what is output 11:31:03 so, yes, it would help :) 11:31:07 right, but the only thing you need to maintain is whether it halts or not 11:31:14 by definition of TCness 11:31:14 So you're Mike Feeney? 11:31:40 i used my middle name in that paper for some reason 11:31:42 so i guess so, yeah 11:33:09 I know Luigi is TC, but I can't get anyone to believe me 11:33:23 elliott: if i can make it halt, it's not a lot more work to save the data string, really 11:33:23 -!- Ngevd has changed nick to Taneb. 11:33:28 right 11:33:31 Ngevd: write a proof 11:33:39 or implement BCT in it 11:33:40 or something 11:33:52 A proof is simple but tedious 11:34:04 tedious? 11:34:05 I can implement arbitrary Turing machines in it 11:34:38 you haven't proved you can, only done so for specific instances :P 11:34:52 just translate a UTM? 11:35:06 is the proof of BCT's turing-completeness not online anymore? 11:35:18 wiki mentions a link under External resources, but there isn't one 11:35:25 It's sooo tedious 11:35:44 would automating it be tedious too 11:35:47 graue: http://esolangs.org/wiki/Bitwise_Cyclic_Tag#BCT_emulation_of_cyclic_tag_systems? 11:36:03 oh, gotcha 11:37:11 heh, which relies on a 1961 proof by Marvin Minsky 11:37:17 waaaay before my time 11:39:39 taneb do fueue programs ever terminate 11:39:53 oh, H 11:39:56 is that the only way 11:40:06 Yes 11:40:38 Or maybe... 11:40:44 and the empty program is cat? 11:40:45 I think an empty program terminates 11:40:45 Is there a list of esofilearchive mirrors? 11:40:52 you only think that? 11:40:55 oh, i just noticed BCT halts iff the data string becomes empty 11:41:07 so there's literally no data to preserve other than "the program halts" 11:41:21 mRoman: I'm not sure there are any 11:41:27 mRoman: i don't think there are any public mirrors right now, feel free to set one up 11:41:34 ok 11:42:25 * Sgeo boggles at a thing that supposedly can turn CL into a Lisp-1 11:43:09 mRoman: on the off-chance that you do, do the wiki too. i'm not convinced pgimeno is still taking backups :p 11:43:45 Sgeo, seriously? 11:43:51 Oh, wait. 11:44:00 So. We have one public esofilearchive mirror then. 11:44:05 I thought you meant Lisp-1 like Banana Scheme's Scheme-ns. 11:44:34 http://www.cl-user.net/asp/22C3/sdataQIUx9IbXRN5hDQ30CH8X8yBX8yBXnMq=/sdataQu3F$sSHnB== 11:44:47 This is not, in fact, an entirely understandable to me introduction to code walking 11:45:01 -!- ais523 has joined. 11:45:12 pgimeno? 11:45:31 I hope users are periodically downloading the latest dump. 11:45:35 An inactive-ish admin on the wiki listed on the old wiki preservation page. 11:45:36 pgimeno was a guy who was involved in the esolang community but hasn't been around much for 5+ years (i think) 11:45:50 he was around only a few years ago when paintfuck was popular 11:46:08 mRoman: i doubt anybody is, really 11:46:10 oh, ok... anyways, he claims to be backing up the wiki but who knows 11:46:17 there were a few mirrors but they slowly died off but one 11:46:27 well, he'll certainly have to update the crontab if he is :) 11:48:18 new mediawiki pet peeve: edit a page => save => go back 2 pages => "Are you sure you want to leave? Data may not be saved." 11:48:57 oh, that's annoying... I think I can make that warning a preference 11:50:03 you can use your browser's "back 2" command rather than clicking on back twice, but that's not really a perfect solutin 11:50:03 ais523: You have 1 new message. '/msg lambdabot @messages' to read it. 11:50:03 yes, apparently... I'll look into it later 11:50:07 *solution 11:50:09 @messages 11:50:10 elliott said 5h 16m 48s ago: yep, Yandex is violating /robots.txt: 87.250.255.243 - - [26/Feb/2012:06:30:56 +0000] "GET /w/index.php?title=Auo&action=edit§ion=6 HTTP/1.1" 302 161 "-" "Mozilla/5. 11:50:10 0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" 11:50:31 * elliott 's browser doesn't have a back 2 command 11:50:38 unless you mean just going to the list of previous pages in the back button 11:51:31 yep, that's what I mean 11:51:47 oh, and I just ran your robots.txt through a syntax checker in case that was the problem, it parses fine 11:52:20 I think what happened for that one, actually, is that it loaded http://www.esolangs.org/w/... 11:52:31 and then got redirected to the www-less domain (thus the 302), and didn't load the target page 11:52:48 hmm, actually, that doesn't make any sense, it should have loaded http://www.esolangs.org/robots.txt first anyway 11:53:03 I guess you could make that page not a redirect? 11:53:18 I can conceive of bots that don't follow redirects on robots.txt 11:53:55 meh, I'll just wait to see if it does a third naughty thing and block it :p 11:54:04 heh, Slashdot are discussing the whole issue of whether Macs get viruses, and someone mentioned that the worst malware infection they saw was on Solaris, and it had got in via a CDE vulnerability 11:54:18 and the person was trying to figure out why anyone would bother to target CDE 11:54:45 What do they mean by 'worst'? 11:56:05 -!- monqy has quit (Quit: hello). 11:56:06 they didn't say 11:56:20 and there doesn't seem to be a lot of point in asking 11:56:42 hey mRoman: thanks for setting up a mirror of the file archive 11:56:58 did you set up a cron job or script or something so it'll update automatically? 11:57:54 wow that was a bizarre advert I just saw on YouTube, it was advertising some sort of game, which had bonus levels if you were using IE9 11:58:14 I'm not entirely sure if that's an attempt to get people to switch away from IE8, or from Firefox/Chrome 11:58:21 (or from IE6…) 11:58:29 -!- Taneb has quit (Read error: Connection reset by peer). 11:59:22 elliott: Ic. 12:00:49 CDE? 12:02:07 a really old desktop environment 12:02:12 with a famously obnoxious color scheme 12:03:21 -!- Phantom_Hoover has quit (Remote host closed the connection). 12:04:35 -!- Phantom_Hoover has joined. 12:09:56 does zsync use special ports? 12:10:00 Or does it sync over http? 12:10:50 HTTP 12:11:05 ok 12:12:03 it might be an unwise idea to expose the sync'd dump on your server, depending on your bandwidth quota, since it's ~150 megs 12:12:18 it would be nice if zsync could work on a compressed copy itself but i haven't been able to look into that yet 12:12:44 yeah, i wrote a little script that does gzip -d && zsync && gzip 12:13:38 && rm esolang.xml.zs-old, or else it seems to leave the old version behind 12:13:50 yes, that's probably the best way for servers that want to offer downloads 12:13:51 and yeah, it does 12:14:12 i picked it over rsync because it means i don't have to maintain another server :p 12:14:32 I have no traffic limit 12:14:37 hm. ok 12:17:54 SVN apparently uses more than just 3690 tcp 12:18:44 it uses 80 for http svn servers, presumably 12:19:04 then the filearchive is probably http 12:19:50 " svn co http://esoteric.voxelperfect.net/svn/esofiles/ ./" 12:19:56 seems like an accurate assessment to me :p 12:21:02 yeah :) 12:21:22 Someone locked the repository 12:21:27 I can't update right now 12:21:33 svn: Working copy '.' locked 12:21:41 that sounds like a local problem 12:21:42 that's your local copy 12:21:44 perhaps you locked it in a failed update? 12:21:45 oh 12:21:45 ok 12:21:49 yeah. 12:22:01 It failed because iptables kicked it's ass ;) 12:22:07 "svn unlock ." apparently 12:22:12 svn cleanup 12:22:22 oh, or "svn cle" -yeah 12:24:03 I have so many iptables rules I had to write to my virtual hoster do increase my allowed rules count :) 12:26:09 esolangs.org has... 0 :p 12:32:45 i'm implementing BCT in sortle 12:32:59 ok 12:33:12 I download the latest dump at 06:30 my current local time 12:33:23 what local time is that? 12:33:24 and update the filearchive mirror at 06:30 my current local time 12:33:27 gmt +1 12:33:30 with DST 12:33:37 fair enough 12:33:44 anything after 6:15 UTC or so is fine 12:33:48 currently it's 13:36 here 12:33:57 1:30 pm 12:34:05 (before that runs the risk of triggering when the dump is being generated) 12:34:16 oh. 12:34:20 ok 12:34:54 could you generate the dump as .xml.gz.part and rename it over the old .xml.gz only when it's finished? 12:34:55 I'm UTC 1 12:35:13 (or even better have the .part be in a non-web-accessible directory) 12:35:24 graue: yeah, I was planning to make the script do that 12:35:26 I just overwrite the last dump with a wget. 12:35:32 mRoman: oh, ouch 12:35:42 Which is baaad 12:35:53 If your server gives me a bad dump. 12:36:04 But I can't afford a history of 20mb files 12:36:07 that'd flood the server. 12:36:21 why not use zsync? 12:36:31 I'll implement something like round-robin 12:36:49 elliott: Will that help if your server goes boom boom? 12:36:56 does zsync have a history so I can rollback? 12:36:56 graue: but even then, if you download at e.g. 6:00 and it still gets the old dump, that means it takes you 24 hours to get any changes m:) 12:37:17 mRoman: zsync saves the old file to zs-old if there are any changes 12:37:22 mRoman: but if my server goes kaboom, it won't even start 12:37:44 the main advantage of zsync is that it uses a tenth of the traffic :p 12:37:44 With boom boom I mean "delivers me a corrupt file" 12:37:51 zsync verifies checksums 12:38:04 and it'd still go to zs-old 12:38:13 (and the zsync file itself would have to be validly-formed for it to even start) 12:38:31 elliott: who cares if the dump is ~2 days old instead of ~1 12:38:49 well, probably nobody :P 12:38:50 the idea is just to not lose this stuff if the main server fails and/or the person hosting it disappears 12:39:07 yeah 12:39:10 which was a recurrent problem with esolang sites before we started the wiki 12:39:15 long before you were born. :P 12:39:38 hehe 12:39:57 i have felt the effects with the 2400 different urls for catseye :) 12:40:26 indeed, catseye still has a lot of great content that's not on the wiki or file archive 12:40:44 we should see if we can get more of chris's implementations and docs into the archive 12:41:08 I think catseye is pretty unlikely to go kaput these days, but yeah 13:11:37 -!- azaq23 has joined. 13:11:46 -!- azaq23 has quit (Max SendQ exceeded). 13:12:10 -!- azaq23 has joined. 13:25:41 ok 13:25:54 I have now a 3 day rotation of esowikidumps 13:26:10 http://eso.fmnssun.ibone.ch/wikidump/ 13:26:21 -!- Taneb has joined. 13:26:23 Hello 13:26:53 hi 13:26:55 mRoman: great 13:27:32 -!- hagb4rd has quit (Ping timeout: 240 seconds). 13:30:57 Which means I suck every day 20mb :) 13:31:14 (which is no problem for me) 13:31:20 My server has an average traffic of zero 13:32:29 If it weren't for irc. 13:32:42 which sucks about 5MB a day. 13:33:46 -!- MoALTz_ has joined. 13:35:30 is there a reason you can't use zsync, out of curiosity? I'd like to fix any issues with adopting it so it's as useful as possible 13:36:07 -!- Taneb has quit (Quit: Lunch?). 13:36:59 -!- MoALTz has quit (Ping timeout: 252 seconds). 13:39:16 elliott: The wiki says it stores the file uncompressed. 13:39:19 Which is 150Mb 13:39:51 a three day rotation of the gz-file uses only half of that. 13:39:58 So space is my concern. 13:40:19 fair enough -- you could ask graue for his shell script, which would only use 150 megs for the duration of the download 13:40:33 but it'd be nice if it could operate directly on the compressed files, i agree 13:41:53 My html/ is currently 442MB 13:42:01 and the uncompressed would exceed the 500MB 13:43:11 right -- but by decompressing before and recompressing after as graue's shell script does, it'd be the same amount of storage (~57 megs) used normally, and about ~131 megs extra used for only a few minute interval when it actually does the download 13:43:22 which is a lot less than 500 ;) 13:44:32 MB? Still using zip drives? 13:44:52 you mean most people don't use zip drives? 13:45:02 although 13:45:09 I have 100MB of flash games on my server 13:45:14 which aren't really necessary 13:45:25 that would make enough space for the zsync 13:45:59 and 106MB of IRC logs. 13:46:44 if you have a shell-script to do the rotation it's just 2 lines extra or so to compress post-zsync, which I'd recommend 13:46:50 which would require freeing up considerably less space :p 13:47:08 I just delete files older than 3 days with find ctime 13:47:17 ah, ok 13:50:05 -!- Vorpal has joined. 14:37:01 -!- cswords has joined. 14:37:44 -!- cswords_ has quit (Ping timeout: 276 seconds). 14:44:40 Error: uncaught exception: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIDOMWindow.alert]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" 14:44:45 wtf. 14:46:36 leading "ns" means either OS X or Firefox, doesn't it? 14:46:48 they both use the same namespace prefix, much to everyone's confusion 14:47:42 (for historical reasons in both cases: NeXTstep, and Netscape) 14:49:03 netscape more like nutscrape 14:49:17 intersuck exploder 14:49:54 welcome to 1997, kmc 14:50:17 yeah 14:50:25 firefox does not refresh innerHtml fast enough 14:50:26 or at all. 14:50:59 I may have to refactor that to use setTimout calls 14:51:06 but that sucks. 14:52:52 graue: [THIS WEBSITE UNDER CONSTRUCTION] 14:53:23 I think all wikis should have that, in big red letters, at the top of every page 14:55:49 puh 14:55:54 i hate dom/js 14:56:26 elliott: what if they have a red background? 14:56:57 THIS WEBSITE UNDER CONSTRUCTION 14:57:08 ais523: Even better. 14:58:08 Firefox won't display what I tell him with innerHtml 14:58:40 oh 14:58:45 maybe invalid html 15:00:29 maybe because it's innerHTML 15:01:21 interesting. 15:01:32 Why doesn't firefox tell me there's no innerHtml o_O 15:01:42 because you can set any property you want on an object 15:01:48 although, hmm, I'm not sure that applies to DOM objects 15:01:50 you're using Firebug, right? 15:01:58 the first rule of programming language design is, don't give any error messages 15:02:06 programmers /hate/ error messages 15:02:09 makes them feel stupid 15:03:24 don't give errors, just delete the source file if it's wrong 15:10:18 and just to be safe, delete any other source files in the directory 15:10:24 you know, in case they have errors too 15:11:05 so i successfully implemented BCT in sortle but then i tried to get fancy and i broke it 15:11:21 and that is where this story ends, for now 15:13:05 http://eso.fmnssun.ibone.ch/beam/ <- Works \o/ 15:13:06 | 15:13:06 /| 15:13:26 Fancy JS which displays how the code runs. 15:13:47 this is cool 15:14:06 sortle was turing-complete for a few brief minutes 15:14:31 mRoman: does not appear to work in chromium :( 15:14:33 well i still have the working version, it's just not fancy 15:14:37 elliott: Hm? 15:14:43 Define "not appear to work"? 15:15:07 the prgoram appears when i click run, but then nothing happens :) 15:15:24 If you click on run under Debug the program should appear 15:15:31 and the current instruction is highlighted green. 15:15:34 it isn't 15:15:40 the program appears, but black on white, and nothing further happens 15:15:47 weird. 15:17:16 works in my chromium. 15:17:22 what version? 15:17:31 hmm, the output does come out after a while though 15:17:36 I wonder if this is the fix for that bug: https://github.com/ghc/ghc/commit/536e2a029dcc11c33c9448146b34513c682f17a 15:17:39 but still no highlighting 15:17:41 6.0.472.63 (59945) Built on Debian 6.0, running on Debian 6.0.4 15:17:56 olsner: seems too recent 15:18:25 mRoman: heh, well, mine is chrome 17 so it's pretty incomparable 15:19:16 elliott: Refresh the page 15:19:18 and click run again 15:19:23 i can see the green highlight, but only barely 15:19:32 does it at least show an underline under the current instruction 15:19:41 I admit depending on contrast the green is difficult to see :D 15:19:50 it works now. how strange. 15:20:04 nice flow 15:20:17 is it meant to get stuck in >-! ? 15:20:19 what if instead of foreground you set the background color to #ff0 or something? 15:20:28 oh, it got out 15:20:49 elliott: Not forever @stuck 15:21:00 >-! zeroes the cell 15:21:03 in that case 15:21:08 not in all cases as discussed above 15:21:12 #E1FECB and #EEF are good light backgrounds :p 15:21:15 -cell +beam 15:21:21 mRoman: right, it escaped eventually 15:22:00 why is the variable in this language called a "beam" 15:22:15 >-! only works if the value to zero is odd 15:22:40 kmc: It's like a beam of light which travels through space 15:22:48 and that beam can hold a value :) 15:23:08 if it's a beam of light, that makes the bright yellow background color even more appropriate 15:23:15 :) 15:23:39 i changed line 45 of beam.js to text += '' + re + ''; 15:23:44 looks great 15:24:10 btw, very nicely done javascript implementation 15:24:24 it's great to be able to see code run in this kind of language 15:24:30 now it's white on black 15:24:39 with yellow highlight 15:25:12 yes, i really like tracers of 2d languages 15:26:30 feed it the even/odd program 15:26:34 and the character A in stdin. 15:26:41 that looks more funny 15:26:54 http://esolangs.org/wiki/Beam#Even_.2F_Odd 15:27:29 (A is odd, B would be even and so) 15:40:59 -!- Taneb has joined. 15:45:30 Hello! 15:47:21 I should probably reset stdout at run() 15:48:43 I guess I should also dump the beam, store and memory access 15:50:02 hi Taneb 15:53:09 done. 15:53:21 No you can monitor the beam, store and memory at those locations 16:04:54 -!- pikhq_ has quit (Ping timeout: 240 seconds). 16:04:55 -!- pikhq has joined. 16:10:44 *Now 16:11:58 kmc: do you know any language where the parsing rules are affected by the so-far inferred types of elements of the expression being parsed 16:26:17 i know languages which you can't really parse at all without executing them 16:26:27 like Perl or TeX 16:27:40 aiui TeX basically consumes characters from its input one at a time, and processes them according to a table of rules, which can be modified by said processing 16:41:26 -!- azaq23 has quit (Ping timeout: 252 seconds). 16:57:39 -!- azaq23 has joined. 17:06:55 I wish more esolangs actually bothered to have a syntax. 17:07:22 Most of them are just specified as a flat list of instructions. 17:07:40 that's because most of them are brainfuck clones ;) 17:08:17 That I wish less esolangs were BF clones is putting it mildly, to say the least. 17:09:04 brainfuck is a gateway esolang 17:11:20 It's the Sailor Moon of esolangs. 17:11:54 Phantom_Hoover 17:12:01 your whole LIFE is a brainfuck derivative 17:12:06 oh no 17:12:11 * Phantom_Hoover brickbrains life 17:13:10 we are become brick 17:13:23 Plural? 17:13:33 No, Phantom_Hoover, you ARE the brainfuck derivative. 17:13:46 (and then Phantom_Hoover was a brainfuck derivative) 17:13:47 it seems like s-expression syntax would be a good choice for an esolang 17:13:55 it seems like scheme would be a good choice for implementing esolangs 17:14:08 why? 17:14:20 it's very flexible 17:14:25 i see 17:14:44 rubber: a good joice for implementing esolangs 17:14:49 also 17:14:52 a good choice 17:15:33 and you can play fun metacircular tricks 17:16:35 that only works when your language is close to scheme 17:16:38 which it probably isn't 17:16:43 and you have first-class continuations 17:16:51 which you can use to provide crazy control flow in your esolang 17:17:02 or to provide fancy implementations that can run backwards etc 17:17:13 well, i'd like to see more esolangs that are close to scheme 17:17:18 at least they would not be brainfuck clones ;) 17:17:34 that's an age-old rivalry of course 17:17:36 it's kind of a well-mapped design space 17:17:41 but http://esolangs.org/wiki/Banana_Scheme :p 17:17:49 turing machines vs. lambda calculus 17:18:18 * kmc reads about banana scheme 17:21:03 i'm not sure it's that well-mapped 17:23:42 -!- derdon has joined. 17:24:27 congrats on the new domain btw 17:24:56 well, same domain, new server 17:25:05 oh, did esolangs.org work before? 17:26:36 esolangs.org has worked since 2005 17:27:30 it's been a mirror of esoteric.voxelperfect.net for pretty much forever 17:27:37 although we swapped round which was the primary domain in the server move 17:27:39 oh cool 17:28:37 (though esolangs.org was always the more popular domain) 17:31:43 (I always used esoteric.voxelperfect.net, which seemed easier to remember 17:31:44 ) 17:33:00 Easier to remember than 'esolangs.org'??? 17:33:37 esolangs.org not the direct link to the wiki 17:33:51 esolangs.org pointed to some intermediate page 17:33:55 which had a link to the wiki 17:33:59 Still does, always has. 17:34:05 no @still does 17:34:11 esolangs.org now redirects directly to the wiki 17:34:15 Uh, no. 17:34:20 Oh wtf 17:34:24 Wow, my cache was WAY out of date. 17:34:27 Friendship, I kept think it was esolang.com 17:34:29 Hard refresh and it goes to the wiki X-D 17:34:32 or without a time interval 17:34:52 Friendship: Using cache is so 1990 ;) 17:38:47 esolangs.org pointed to some intermediate page 17:38:48 which had a link to the wiki 17:38:52 So did esoteric.voxelperfect.net. 17:40:42 I thought esoteric.voxelperfect.net went directly to the wiki 17:40:49 Nope 17:40:52 but I usually typed esolangs.org/wiki/ 17:40:53 no, esoteric.voxelperfect.net/wiki did 17:41:24 In the esoteric file archive there is a Brainfuck Genetic Text Generator. 17:41:31 !bf_txtgen this thing 17:41:36 ​88 +++++++++++++[>++>+++++++++>++++++++>+<<<<-]>>-.>.+.<-.<++++++.>+.>-.+.<------.>--.>---. [649] 17:41:50 Anyway, esoteric.voxelperfect.net was literally identical to esolangs.org. 17:41:52 Now they're not. 17:41:58 Does this produce optimal bf-code to print out strings? 17:42:05 optimal = smallest possible? 17:42:19 !bf_txtgen A 17:42:22 ​35 ++++++++[>++++++++>+>><<<<-]>+.>++. [7] 17:42:53 mRoman: that's (provably) impossible. 17:43:14 How is it impossible? It's just extremely inefficient 17:43:30 Halting problem? 17:43:32 (I guess) 17:43:37 Ah yes 17:43:38 http://en.wikipedia.org/wiki/Kolmogorov_complexity#Incomputability_of_Kolmogorov_complexity 17:43:42 Damn 17:43:48 Halting problem my enemy 17:44:01 Okay, it's impossible /and/ extremely inefficient 17:44:03 the halting problem only breaks the obvious brute-forcing approach. 17:44:15 elliott: In theory yes. 17:44:21 You could just limit the runtime of a program. 17:44:32 yes, which would stop you getting the "optimal", "smallest possible" 17:44:40 Not necessarily. 17:44:46 It would 17:44:54 the fact that you might sometimes hit upon the optimal program with such a process does not mean it would "work" 17:44:55 You'd need to redefine optimal 17:44:58 If a program runs longer than 10seconds 17:45:06 e.g., the process "return '.' for every string" also gives the optimal program for the output string "\000" 17:45:11 and has not generated a single number from 0-255 17:45:17 it's probably not a useful program ;) 17:45:23 well, you never said useful. 17:45:30 If you define optimal as in "shortest running time", then generate an upper bound, and then brute force with a time limit 17:45:35 useful is a whole 'nother bag of constraints... and one incredibly hard to codify 17:45:37 and by that I mean endless loop 17:45:58 no, there are in fact an infinite number of programs fitting that criterion that are not infinite loops :) 17:45:58 -!- Taneb has left ("Goodbye"). 17:46:04 -!- Taneb has joined. 17:46:07 How high is the probability that the optimal program to print 'A' runs longer than 10 seconds? 17:46:14 Then you end up with just +++++++++++++... 17:46:23 mRoman, non-zero 17:46:33 Yes, non-zero. 17:46:42 mRoman: you can create a provably perfect program for 'A' I'm sure 17:46:51 it's just the optimal program to generate ord 'A' plus a . 17:46:56 The propability that 1 bit got shifted in your memory is also non-zero ;) 17:47:07 it's much higher than zero, RAM errors happen all the time 17:47:28 anyway, it's unlikely for "A" but there will be pathological strings that any such "reasonable" algorithm fails at 17:47:29 The probability of an ice cream suddenly appearing in my hand is non-zero 17:47:44 It's unlikely, but still theoretically possible 17:47:50 making something reasonable doesn't defeat the mathematics :) 17:50:56 How about 17:51:11 Printing 'A' requires a programm of length 65 17:51:15 if not optimal 17:51:32 +++(65x). 17:51:53 -!- Taneb has quit (Read error: Connection reset by peer). 17:51:54 Which takes 65 "cycles" 17:52:16 Does a theoretical optimal program have more or less cycles or the same amount of cycles? 17:52:46 I would assume, if there are no qualifiers, that "optimal" in this context is the shortest. 17:52:49 Incidentally, i wrote a brute force-ish hack to convert strings to BF code recently. I’ll paste it, a moment… 17:53:16 fizzie: In this context, yes. 17:53:18 Which is likely to take more cycles than that. 17:53:36 ^bf ++++++++[>++++++++<-]>+. 17:53:36 A 17:54:04 8*8+1 17:54:20 well 17:54:26 do we count [ and ] as a cycle? 17:54:47 Sure, why not? 17:54:49 [] 17:54:58 that have infinite cycles 17:55:01 at max 17:55:03 two at least 17:55:06 *has 17:55:19 https://gist.github.com/1917958 17:55:28 so 17:55:35 it has more than 65 cycles, yes. 17:55:41 One, if you think that the [ skips past the matching ], and current value is zero. 17:55:48 It has more than 65 even if you don't count the loops. 17:55:56 Yes 17:55:58 ><- 17:56:05 ^bf ++++[>+<++++]>++.!it's shorter with wrapping cells. 17:56:05 A 17:56:21 It would be nice to have two lists of brainfuck constants. 17:56:44 except 17:56:57 is it even possible to have a brainfuck program that prints A with less than 65 cycles? 17:57:04 *in less 17:57:10 ion: Does it beat our GENETICS? 17:57:30 !bf_textgen ABCDE 17:57:41 elliott: It probably won’t beat anything. 17:58:07 !bf_txtgen ABCDE 17:58:12 bf_txtgen is rather bad for short strings if you don't manually lower the number of "terms". 17:58:12 ​43 +++++++++[>+++++++>+>><<<<-]>++.+.+.+.+.>+. [189] 17:58:21 See the >><< there, for example. 17:58:30 That should've been run with -t 2. 17:58:32 λ> toBF "ABCDE" 17:58:33 expr 34 ">+++++++[<+++++++++>-]<++.+.+.+.+." 17:59:08 !bf_txtgen Sure, but bf_txtgen is pretty darn good for very long strings. How does ion's toBF cope? 17:59:11 ​804 ++++++++++++++[>+++>++++++>++++++++>++++++++<<<<-]>>-.>>+++++.<++.-------------.<<++.------------.>>---.>.-.<<<.>+++++++++++++++.>++++.-------.>.++++.----.<<+++++.--.>>------.<---------------------------------------------------------------.>-----.++++++++++.<.>---.++.<<.>>++..+++++.<.<<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.---.>>>-------.----.<.<++.++++++++..<+++.>>.<<++.>.+++.>.<++++.<-.>----.+++++++.>.<<+++++++.>----------.-. 17:59:22 FSVO pretty darn good. 17:59:32 Yeah, that got kind of cut off, too. 17:59:34 fizzie: You have that there scientific cluster, don't you? 17:59:36 friendship: 1443 17:59:44 How willing are you to misuse it for important esoteric research? 17:59:59 *important* 18:00:20 Yes. 18:00:22 important. 18:00:28 -!- oerjan has joined. 18:00:31 It simply generates a constant expression for each character’s delta from the previous one. 18:00:32 finding shortest brainfuck constants? 18:00:39 Brute-forcing, to be precise. 18:00:41 Friendship: With -t 6 and a bit of running, it goes down to 722. 18:00:55 (Yes, a theoretically-impossible task; except I have a semiprecise definition of "useful".) 18:01:05 (For instance in this case the setting is actually sub-TC.) 18:01:06 And not very. 18:01:19 fizzie: But... what if it was *super* fun? 18:01:20 I haven't even misused it for that AI tournament, and that's even a course. 18:01:27 I thought you misused it for a silly once. 18:01:29 Do I misremember? 18:01:52 I don't remember anything like that, but that's no proof. 18:01:59 Ooh, 679. 18:02:03 Soon it'll fit in IRC. 18:02:08 Well, "soon". 18:02:15 !bf_txtgen ☺ 18:02:17 ​86 +++++++++++++++[>+++++++++++++++>++++++++++>++++++++++++>+<<<<-]>+.>++.>++++++.>-----. [107] 18:02:31 fizzie: Well, if you chose not to remember it not happening, would that convince you? 18:02:54 ^bf +++++++++[>+++++++>+>><<<<-]>++.+.+.+.+.>+. 18:02:55 ABCDE. 18:02:59 Right, it adds a newline too. 18:03:30 So the proper comparison would've been against "ABCDE\n". 18:04:02 @messages 18:04:02 elliott said 9h 18m 19s ago: wow, your BCT interpreter was 2009? 18:04:03 Oh, my code is actually broken when it makes nested loops. Oh well, i have already lost the interest to toy with it. 18:04:10 elliott: seems so 18:04:27 oerjan: seems later. 18:05:18 It's not wanting to go down from 622. :/ :/ :\ 18:05:52 fizzie: Do you know what could help it? 18:07:11 fizzie: PERFECT CONSTANTS. 18:07:24 -!- Taneb has joined. 18:08:20 elliott: maybe it's because i didn't do anything big in 2010. or did i? 18:08:52 oerjan: Well, there was that one time you saved the world from an alien attack. 18:09:13 Hello! 18:09:15 fizzie: sadly i had to erase that from memory. or so i assume. 18:10:46 oerjan: did you know that you have the most edits on the wiki? 18:10:54 even ignoring reverts, undos and edits with "spam" in the summary 18:11:04 elliott: wow 18:11:22 yep. 1813 total, 1473 non-spamcleanup 18:11:34 (I ran a DB query out of curiosity) 18:12:05 elliott: it is _possible_ some of the remaining summaries are still spam, of course :) 18:12:19 Bug report: Special:Statistics shows there are -1 active members. 18:12:25 I'm fairly confident this is false 18:12:58 oerjan: well 18:12:59 mysql> select count(*) from revision where rev_user = 89 and rev_comment not like 'Undo%' and rev_comment not like 'Revert%' and rev_comment not like '%spam%' and rev_comment not like '%SPAM%'; 18:12:59 +----------+ 18:12:59 | count(*) | 18:12:59 +----------+ 18:13:00 | 1472 | 18:13:02 +----------+ 18:13:04 better query suggestions welcome :P 18:13:14 Taneb: yes, seen and annoyed 18:13:18 i think it might fix itself in ~30 days 18:13:36 mysql> select count(*) from revision where rev_user = 89 and rev_comment not like 'Undo%' and rev_comment not like 'Revert%' and rev_comment not like '%spam%' and rev_comment not like '%SPAM%' and rev_comment not like '%Spam%'; 18:13:36 +----------+ 18:13:36 | count(*) | 18:13:36 +----------+ 18:13:38 | 1471 | 18:13:40 +----------+ 18:13:44 oerjan: i don't think there's any way down from this totem pole of prominence. 18:13:57 On another note, this is my best family tree making program ever 18:13:59 elliott: i'm suggesting that i sometimes use rather punny summaries 18:14:07 It actually has an interface 18:14:12 mysql> select count(*) from revision where rev_user = 89 and rev_comment not like 'Undo%' and rev_comment not like 'Revert%' and rev_comment not like '%spam%' and rev_comment not like '%SPAM%' and rev_comment not like '%Spam%' and rev_comment not like '%revert%' and rev_comment not like '%rv%'; ---> 1461 18:14:32 of course i _do_ correct a lot of typos and stuff 18:14:47 oerjan: ok well if you figure out a way to shave off another 192 edits from that total you'll be second place 18:14:50 good luck with that 18:15:12 oh, it'll take more than that i guess. since the second place has done spam reversions too, obviously 18:15:24 i think you should just accept it. as well as the mandatory administrator rights it brings :D 18:16:01 hmph. what a disappointingly subdued reaction. 18:16:14 elliott: O KAY 18:16:23 what subdued reaction? 18:16:30 see you'll be lulled into complacency 18:16:37 and then ais523 will do it out of the blue 18:16:49 do what? 18:17:03 sysop you. 18:17:11 can he do that? 18:17:14 I wouldn't sysop someone without their permission 18:17:16 and yes, I can 18:17:16 yes. i made him a 'crat 18:17:30 (elliott gave me the required perms as part of the wiki move) 18:18:02 he is all-powerful. second only to the aller-powerfulest me. i have the ability to run fun queries to satisfy my curiosity on the live database 18:18:56 (Okay, why does elliott have imperium maius?) 18:18:59 oerjan: anyway, see, complacency. 18:19:10 Taneb: COMPLACENCY 18:19:32 Taneb: the alternative was timwi, or something. 18:19:48 The alternative was the communists. 18:19:54 if you translate Esolang permissions into Wikimedia permissions, I'd be a steward and elliott'd be a dev 18:19:57 they walk among us 18:20:46 ais523: devs don't usually have divine right to rule, do they? 18:20:57 wait, i said nothing. 18:21:08 they have the technical capability to do so, but aren't allowed to 18:21:10 CAN but SHALL NOT, etc 18:21:16 elliott, I thought you were a communist? You were on Pyralspite 18:21:38 That was just a trap. to track down the communists. 18:21:40 once a year they go around wearing red and putting evil communist subsidies in americans' socks 18:21:55 `quote communism 18:21:58 (well they always wear red, of course, when they're not being stealthy) 18:22:04 486) This staircase is very good for correcting people's opininons about communism 18:22:33 COMPLETELY NEUTRAL OUT OF CONTEXT 18:22:39 RELATIVELY NEUTRAL IN CONTEXT 18:22:52 Oh, I love being centre-left on the political spectrum 18:23:08 do you ever get the feeling Taneb isn't real 18:23:32 I once convinced myself I was a figment of elliott's imagination. 18:23:48 i don't think i could think you up 18:23:54 elliott: hm i'd be assuming the reason you never met was because _you_ aren't real, but perhaps neither of you is. 18:23:57 *been 18:24:29 The entire of South West Northumberland doesn't exist 18:24:37 oerjan: come on, which is more believable? 18:24:41 i was here first. 18:24:50 true. 18:24:52 I have been heard of outside of IRC 18:25:14 Taneb: Northumberland doesn't have a South West, it's North by definition 18:25:17 so has elliott. 18:25:27 I have been heard of outside the Internet 18:25:31 oh right, that's what you said, just in different words 18:25:32 Taneb: not by me 18:25:38 -!- FireFly has quit (Changing host). 18:25:53 BY THE MAJORITY OF 15-18 YEAR OLDS IN SOUTH-WEST NORTHUMBERLAND 18:25:54 (neither has elliott) 18:26:17 oerjan: is being a hermit nice? hexham is so crowded. 18:26:20 with Taneb, and all. 18:26:29 Taneb: they don't count, since that place doesn't exist 18:26:46 `quote hermit 18:26:50 My name has been mentioned in the Hexham Courant 18:26:50 512) i try to be a hermit but it's hard with all these housemates. 18:27:06 THEY'RE STILL THERE 18:27:06 yeah sure. "housemates" 18:28:24 oh god, one of them started coughing like on queue 18:28:59 *cue 18:29:04 dammit 18:29:11 que? 18:29:33 spell things correctly, that's the quay 18:29:58 food -> 18:30:24 elliott: rev_comment not regexp '^(Undo|Revert|[Ss][Pp][Aa][Mm])' or some-such. 18:30:26 -!- Taneb has quit (Read error: Connection reset by peer). 18:31:44 fizzie: Oh sure. With your fancy "regexps". 18:31:47 And your "science". 18:32:03 fizzie: If you're smart, how about giving me a query for all users with 0 undeleted revisions, and more than 0 deleted revisions, huh? 18:33:34 Suddenly the smartFinn smarts NO MORE. 18:34:17 I don't really know the MySQL or the mediawiki DB schema. :/ 18:34:25 elliott: rev_comment not regexp '^(Undo|Revert|[Ss][Pp][Aa][Mm])' or some-such. 18:34:28 THEN WHAT AM THIS??? 18:34:41 Well, the rev_comment came from your thing, and the regexp I've seen. 18:35:04 But I did do a Grasp 'cat' program in the hypothetical edge-labeled Grasp, it's at http://zem.fi/~fis/grasp-cat.png 18:35:21 mysql> select user_name from user where (select count(*) from revision where rev_user = user_id) = 0 and (select count(*) from archive where ar_user = user_id) > 0; 18:35:24 I think it's this or something. 18:35:31 But boy is it slow. 18:35:55 fizzie: Oh that's nice. 18:35:57 You are forgiven. 18:36:53 elliott: right, I don't think there's an index that would work for that 18:37:36 * elliott would like a surer check :( 18:38:29 i wonder if adding new syntax highlighting to pandoc requires modifying and recompiling highlighting-kate 18:38:51 which is a huge package that takes forever to build in cabal's single-threaded world 18:38:56 i hear they made that package nicer 18:42:41 elliott: You could eliminate a subselect by grouping archive by user, something like select ar_user from archive group by ar_user having (select count(*) from revision where rev_user = ar_user) = 0 -- that way it'd only consider users found in the 'archive' table. 18:43:27 today's advice: don't be so distracted you try to eat your vitamin pill and a piece of bread at the same time. 18:43:31 (yuck) 18:43:56 (sorry, i don't _have_ a twitter account) 18:44:10 oerjan: How about a facebook? 18:44:14 neither. 18:46:54 how many facebooks are there? 18:46:58 -!- PiRSquared17 has joined. 18:47:17 I think the way they speak nowadays is "I have a facebook" "my facebook was hacked" etc. 18:47:40 this is like people who think that their computer came with Google as its OS 18:47:50 and thus, that they can't change their homepage or the entire system will break 18:47:52 Also they said at one point "my MP3 is red and holds a thousand songs"; they're talking about a portable player. 18:47:55 today's hypothesis: the reason aliens have not contacted us is because they cannot find a way to do it without violating our i.p. laws 18:48:44 (basically all aliens are ais523 clones) 18:49:35 or possibly ais523 _is_ their emissary, but they wiped his mind for the same reason. 18:51:56 well it could be that or the immigration laws. 18:55:00 -!- PiRSquared17 has quit (Remote host closed the connection). 19:06:27 -!- cswords_ has joined. 19:07:57 elliott: You could eliminate a subselect by grouping archive by user, something like select ar_user from archive group by ar_user having (select count(*) from revision where rev_user = ar_user) = 0 -- that way it'd only consider users found in the 'archive' table. 19:08:04 fizzie: Also there's a cache for the count revision of user. 19:08:09 Except it might include deleted edits too. 19:09:09 I think the way they speak nowadays is "I have a facebook" "my facebook was hacked" etc. 19:09:09 this is like people who think that their computer came with Google as its OS 19:09:09 and thus, that they can't change their homepage or the entire system will break 19:09:30 I don't really see how this is unreasonable; plenty of things have been "nounified" in a similar way 19:09:34 heck, even "IRC" has 19:10:02 elliott: but it's a collective noun 19:10:05 _my_ IRC hasn't 19:10:06 you can't say "an IRC" 19:10:07 oh darn. 19:10:20 you can say "an IRC server", or "an IRC client", or "an IRC channel", but not "an IRC" in the abstract 19:10:38 ais523: ok, "email" 19:10:41 "my email is ..." 19:10:45 -!- cswords has quit (Ping timeout: 276 seconds). 19:10:46 perfectly reasonable and ubiquitous 19:11:04 hmm, I more commonly see it used to mean "email message" than "email address2 19:11:06 *" 19:11:37 yep, but they're both just like "facebook" 19:14:34 fizzie: Also what does group by actually do? 19:15:02 Puh. 19:15:07 Ah, it puhs. 19:15:15 I thought translating BF-Loops to Beam would be trivial :) 19:15:31 Turns out it's more tedious than I thought. 19:15:43 ++++[>++++++<-]> 19:15:49 (Brainfuck constant 24) 19:15:57 ais523: any ideas for ways to turn that query into something more unambiguously spammer-only? 19:16:08 v v < 19:16:08 p/++++Pnv>'p++++++P`p-Pu'p: 19:16:09 >^ > ^ 19:16:10 it gets 3289 users 19:16:20 which is amazing, we could eliminate the vast majority of spammers with a single query if refined 19:16:20 translated to beam :) 19:16:25 (every time oerjan tried to figure out whether another subset of Underload is TC I would insist it can't possibly be, but he proved me wrong every time :)) 19:16:52 elliott: hmm, I wouldn't be sure that would have no false positives 19:16:57 although I doubt there can be many 19:16:58 on the other hand, i agreed with your predictions every time too, i just didn't let that stop me from disproving them :) 19:17:08 oerjan: reminds me of the 2,3 thing, I thought it was incomplete 19:17:12 until I proved otherwise 19:17:18 and that took me by surprise 19:17:25 oerjan: indeed :P 19:17:40 :^() being sub-TC I probably would have bet money on 19:17:55 oerjan: btw, I tried getting oerjanswap to type 19:18:03 and I'm a bit confused about whether it does or not 19:18:03 elliott: hmm, I wouldn't be sure that would have no false positives 19:18:06 i don't recall what oerjanswap is 19:18:08 ais523: that's why I want more conditions to refine it :P 19:18:09 perhaps I should try in Haskell 19:18:17 oerjan: it's the implementation of ~ in terms of the other primitives 19:18:21 oh 19:18:29 heh 19:18:51 replacing f with \x.f x is called eta-expansion, right? 19:19:05 yes 19:19:20 it seems to placate the OCaml type-checker somewhat 19:19:24 not sure if that's enough, though 19:19:32 (reminds me of the anecdote of that mathematician who stood up during a conference and asked "Excuse me, but what is a Hilbert space?") 19:19:35 I eventually got oerjanswap to type, but the type is obviously far too complex 19:19:56 oerjan: you can get a long way understanding the concepts but not the names for them 19:20:17 elliott: It, uh, groups by. If you "group by X, Y, Z", the final results will have one row for each distinct tuple (X, Y, Z) that exists (post-WHERE), and any aggregate expressions like count(*) or sum(W) in the columns-to-select are calculated over the groups. (And then a HAVING clause is pretty much identical to WHERE, except it's done post-GROUP BY, so you can use the said aggregate expressions in the conditions.) 19:20:27 fizzie: RELATIONAL THEORY IS HARD. 19:20:30 -!- graue has quit (Ping timeout: 276 seconds). 19:20:36 (SPOLIER: the mathematician was David Hilbert) 19:20:52 oerjan: :D really? 19:21:02 elliott: well that's about how i heard it. 19:21:16 oh i don't care whether it's true 19:21:19 just that someone other than you made it up 19:22:14 yep. i think my advisor told it to me. 19:22:53 ais523: I thought of a filtering query 19:23:01 ais523: all your spam page deletions have had "spam" in the summary, right? 19:23:12 not /all/ of them, I often typo it 19:23:17 well, the vast majority 19:23:21 yes 19:23:32 right, I'll just make sure the deleted revisions are from those 19:23:39 oh, legitimate users will sometimes have edited pages which were deleted for spam 19:23:50 because some people blanked spam pages, before I told them not to because it was pointless 19:23:57 yes, but they won't have undeleted-editcount 0 and deleted-editcount >0 19:24:00 you should check for the person who /created/ a page deleted as spam 19:24:04 well, /probably/ not 19:24:07 sigh 19:24:10 i have no idea how to do that :P 19:24:36 nor do I 19:24:47 oh archive contains page records. 19:24:58 so my query _was_ page creators 19:25:12 so, it's only finding users that have 0 nondeleted edits, and who have created at least 1 deleted page 19:25:34 archive is edits to deleted pages, isn't it? 19:25:39 that is, "deleted revisions" 19:25:40 The archive table is the place where MediaWiki stores information on deleted pages. The pages may be restored, or undeleted, by a MediaWiki Administrator using the Special:Undelete special page. Beginning in MediaWiki 1.5, the content of the pages remains in the text table; the deletion time is logged in the logging table. 19:25:42 no 19:25:50 ah, OK 19:26:00 OK, I just need to tie it into the deletion reason now 19:26:06 to avoid, e.g. people who just worked on one article which then got deleted 19:26:11 if you end up deleting my account, I'll get annoyed 19:26:33 oh, hmm 19:26:34 "When a page is deleted, all its old revisions move from the revision table to the archive table" 19:26:47 why does mediawiki gotta make this difficult? 19:28:21 ais523: OK, what about this: "All users with 0 undeleted edits and >0 deleted edits to pages deleted with summary 'spam'" 19:28:37 the only false positives will be people who registered, blanked spam, and then never did anything else /ever/ 19:28:46 and I don't think we've had anyone do that 19:28:47 theoretically it isn't perfect, but I doubt it'll have false positives in practice 19:28:53 11:31:07: right, but the only thing you need to maintain is whether it halts or not 19:28:56 11:31:14: by definition of TCness 19:29:05 the idea of not including even a single output bit disturbs me. 19:29:13 oerjan: er that's the halts bit 19:29:26 admittedly, its value is uncomputable. 19:29:35 How about: "All bad users." (SQL can do that, right?) 19:29:37 it's only uncomputable if it's a 1 19:29:42 ais523: ...0 19:29:42 if it's a 0, you can compute it just fine 19:29:46 you have it flipped 19:29:49 err, right 19:29:50 fizzie: totally 19:30:00 which is disturbing. to me, to be TC you should be able to use it to get the full results of an ordinary TM. 19:30:01 oerjan: anyway BCT ends with 0 usable bits 19:30:08 so, tough :P 19:30:20 elliott: on the BCT page it says to output the deleted bits. 19:30:29 which is what i did for /// 19:30:33 well, yes. but that's just a suggestion. 19:31:25 yes, but i assumed it was because that _is_ enough information to extract a result from. 19:33:20 ais523: hmm, only 3803 articles deleted with %spam% comment 19:33:32 seems like it should be more 19:33:43 mysql> select log_title from logging where log_action = 'delete' and (log_namespace = 0 or log_namespace = 2) and log_comment like '%spam%'; 19:33:49 now to integrate this with the above query... 19:33:55 elliott: you could make sort of a note somewhere on the login page to contact you if you think the account has been blocked in error 19:34:09 like. 19:34:22 oerjan: the accounts are probably going to be deleted altogether, as the only people who could see them would be admins anyway 19:34:36 fizzie: how to I say "count of all entries in FOO table matching these criteria where a corresponding entry in BAR table exists matching these criteria" 19:34:39 *do 19:34:59 (there may be multiple such entries in BAR, but I only care about the existence of one) 19:35:07 (or forall, if that's more convenient) 19:35:15 corresponding = with this field matching that field 19:35:42 oerjan: anyway I won't run any query I'm not sure won't block legit users 19:35:56 well beyond a reasonable doubt, anyway 19:37:56 elliott: The straight-forward way would be to subquery it with SELECT count(*) FROM FOO WHERE x AND y AND z AND EXISTS (SELECT * FROM BAR WHERE thisfield = thatfield AND p AND q). Alternatively, some sort of a join. 19:38:11 fizzie: I thought it would be a GROUP BY. 19:38:14 Isn't it a group by? 19:39:07 It's probably not a group by when you don't want a set of unique somethings. 19:39:36 I don't understand this "set of unique somethings" technobabble. :( 19:39:45 I AM TRYING SO HARD HERE 19:40:32 Like, uh, if you have the table ((john, 123), (john, 456), (john, 789), (mick, 1111), (mick, 2222)) and you want the output ((john, 3), (mick, 2)) where the numbers are the number of john- and mick-rows, that's probably a place for a group by. 19:40:58 Like a SELECT name, count(*) FROM thing GROUP BY name. 19:40:58 indeed. 19:41:29 (And the aggregates like 'count' will then be run over the rows in each group.) 19:41:39 (The query here is "count of entries in the revision table where user id = X and ", where the <>s stuff is either "exists log entry where page id = col_of_revision_thing and summary..." or "forall log entries where page id = col_of_revision_thing, we ahve summary...") 19:41:49 *have 19:42:42 Man, why doesn't MySQL just use propositional logic? 19:43:02 Because MySQL somehow uses relational algebra? 19:43:16 Or at least that would be cool. 19:43:17 Does it? Does it really? 19:43:26 elliott: It does and it does not. 19:43:43 It NULLs relational algebra. 19:44:13 That should be at least doable (if not optimally so) with a SELECT count(*) FROM revision WHERE rev_user = X AND EXISTS (SELECT * FROM logorwhatever WHERE log_page_id = rev_page_id AND log_summary = ...). 19:44:38 fizzie: Would a FORALL be just as easy? (Not really a "big ie", as they say.) 19:45:16 If you change that SELECT * in the EXISTS clause to SELECT 1 19:45:45 mysql> select user_name from user where (select count(*) from revision where rev_user = user_id) = 0 and (select count(*) from archive where ar_user = user_id and exists (select * from logging where log_action = 'delete' and (log_namespace = 0 or log_namespace = 2) and log_comment like '%spam%' and log_page = ar_page_id)) > 0; 19:45:49 Gullpe. 19:45:59 The fields selected shouldn't matter at all for an EXISTS query. 19:46:17 Empty set (15.31 sec) 19:46:20 Yes. 19:46:22 fizzie: I have a complaint. 19:46:26 It doesn't work. 19:47:44 Works without "and exists ..." onwards. 19:48:23 How odde, 19:48:25 mysql> select user_name from user where (select count(*) from revision where rev_user = user_id) = 0 and (select count(*) from archive where ar_user = user_id and exists (select * from logging where log_action = 'delete' and (log_namespace = 0 or log_namespace = 2) and log_comment like '%spam%' and log_title = ar_title)) > 0; 19:48:27 works fine. 19:48:30 I guess them page IDs be the screwies. 19:48:56 Possibly; I don't really know how those go. 19:49:06 ais523: Guess who has a 2861-long list of basically certain spambots? 19:49:32 elliott: you? 19:49:37 elliott: There's the bit in the archive table's description of how "ar_page_id: Reference to page_id. -- Will be NULL for pages deleted prior to 1.11." 19:49:43 ais523: Yes, me. 19:49:45 fizzie: Ah. 19:49:45 2861 is low enough to quickly check the list by eye 19:49:50 ais523: yes, I just scanned it 19:49:57 there's patterns and obvious spambot names and the like 19:50:42 fizzie: Now, out of curiosity, say I wanted to add the constraint to that archive select that the ar_timestamp was the lowest of all ar_timestamps in the archive table for the same (ar_title,ar_namespace) pair. 19:50:47 How difficult/horrific would that be? 19:50:53 (This corresponding to the "page creation" concept.) 19:51:09 Note to selF: 19:51:10 *self 19:51:12 mysql> select user_name from user where (select count(*) from revision where rev_user = user_id) = 0 and (select count(*) from archive where ar_user = user_id and exists (select * from logging where log_action = 'delete' and (log_namespace = 0 or log_namespace = 2) and log_comment like '%spam%' and log_title = ar_title and log_namespace = ar_namespace)) > 0; 19:52:53 ais523: I think fizzie "ran away", as they say in Denmark. 19:53:00 elliott: It's not too difficult to express as a yet another subquery, obviously -- I mean, it's just "... and ar_timestamp = (select min(ar_timestamp) from archive a2 where a2.ar_title = ar_title and a2.ar_namespace = ar_namespace) ...", except you may need to add a name for the first archive table for disambiguation -- but it's probably utterly slow to run. 19:53:11 Also, how scary: that query went from ~35 seconds to ~15 seconds to 0 seconds. 19:53:20 I think it's building caches and indexes and whatnot behidnbehind my back. Spooky. 19:55:12 mysql> select user_name from user where (select count(*) from revision where rev_user = user_id) = 0 and (select count(*) from archive where ar_user = user_id and ar_timestamp = (select min(ar2.ar_timestamp) from archive a2 where a2.ar_title = ar_title and a2.ar_namespace = ar_namespace) and exists (select * from logging where log_action = 'delete' and (log_namespace = 0 or log_namespace = 2) and log_comment like '%spam%' and log_title = ar_title 19:55:12 and log_namespace = ar_namespace)) > 0; 19:55:12 ERROR 1054 (42S22): Unknown column 'ar2.ar_timestamp' in 'field list' 19:55:19 fizzie: I did a wrong. :( 19:55:50 You wrote "ar2" and not "a2". 19:55:54 In the min(). 19:56:02 (Where I actually forgot to have the name at all.) 19:56:30 I'm not entirely sure if it needs one, there. 19:56:34 "Opse". 19:56:57 Okay, now it go whirr. Whirr whirr whirr. 19:57:03 2861 to what-will-it-be? 19:57:39 Now it an empty set!!! 19:57:47 Oh nose. 19:57:54 fizzie: "The format of timestamps used in MediaWiki URLs and in some of the MediaWiki database fields is yyyymmddhhmmss. For example, the timestamp for August 9th, 2010 00:30:06 UTC is 20100809003006. The timezone for these timestamps is UTC." 19:58:03 This shouldn't cause problems, right? 19:58:58 I'm not entirely sure how "min" is specified to work; that certainly looks like it should sort right. 19:59:26 Perhaps it's treating "ar_title" as ar2.ar_title? 19:59:30 In the subquery. 19:59:31 Yes, that's very possible. 19:59:45 In which case it'd yield min(ar_timestamp) over the whole archive table for each test. 19:59:56 So I need MORE NAMES. 20:00:04 You may need to make the first archive an "archive a1" and then a1.'s there. 20:00:17 mysql> select user_name from user where (select count(*) from revision where rev_user = user_id) = 0 and (select count(*) from archive a1 where a1.ar_user = user_id and a1.ar_timestamp = (select min(a2.ar_timestamp) from archive a2 where a2.ar_title = a1.ar_title and a2.ar_namespace = a1.ar_namespace) and exists (select * from logging where log_action = 'delete' and (log_namespace = 0 or log_namespace = 2) and log_comment like '%spam%' and log_ti 20:00:18 tle = a1.ar_title and log_namespace = a1.ar_namespace)) > 0; 20:00:23 This is the Worst Query Ever. 20:00:42 2860! 20:00:45 I wonder which one DIED. 20:00:50 fizzie: How do you diff two resultsets? 20:03:02 Gngh. It may be easiest to just stuff those results into two temporary tables, but of course that's not very pretty. I'm sure there's some way of just doing the whole thing as a single statement, too. 20:03:21 ais523????? I bet he knows. 20:03:46 I'm not very good at SQL 20:03:50 fizzie: http://en.wikipedia.org/wiki/Set_operations_(SQL) Perhaps "EXCEPT"? 20:04:15 Yeah, I only remembered the UNION one. 20:04:27 That looks possible. 20:04:38 Assuming MySQL has it. 20:04:55 (Ha, he makes the comedy. 20:04:56 ) 20:05:15 mysql> (select user_name from user where (select count(*) from revision where rev_user = user_id) = 0 and (select count(*) from archive where ar_user = user_id and exists (select * from logging where log_action = 'delete' and (log_namespace = 0 or log_namespace = 2) and log_comment like '%spam%' and log_title = ar_title and log_namespace = ar_namespace)) > 0) except (select user_name from user where (select count(*) from revision where rev_user = 20:05:15 user_id) = 0 and (select count(*) from archive a1 where a1.ar_user = user_id and a1.ar_timestamp = (select min(a2.ar_timestamp) from archive a2 where a2.ar_title = a1.ar_title and a2.ar_namespace = a1.ar_namespace) and exists (select * from logging where log_action = 'delete' and (log_namespace = 0 or log_namespace = 2) and log_comment like '%spam%' and log_title = a1.ar_title and log_namespace = a1.ar_namespace)) > 0); 20:05:22 I am going to go back in time and put my childhood self off coding forever. 20:05:38 Did it actually accept that thing? 20:05:42 No. 20:05:46 It doesn't know what 'except" means. 20:05:55 "Intersection and Set-Difference in MySQL (A workaround for EXCEPT)" 20:05:57 I don't think the syntax calls for ()s around the queries, either; but right. 20:06:00 Arse. 20:06:07 "To get the set difference, here is a similar approach using a sub query: 20:06:07 SELECT DISTINCT * 20:06:07 FROM R 20:06:07 WHERE NOT EXISTS (SELECT * FROM S WHERE R.a = S.a AND R.b = S.b); 20:06:07 " 20:06:07 Arse. 20:06:10 There's the LEFT JOIN replacement also mentioned by the wikipedia page. 20:06:21 fizzie: So, err, how do you stuff results into temporary tables? 20:07:25 It'd be INSERT INTO tbl SELECT user_name FROM ... except there's probably some notation to make a really temporary per-connection table, instead of a "real" one. 20:08:00 I'm crying, you know. 20:08:01 Because of SQL. 20:08:16 * elliott just inverts the check that's causing it. 20:08:21 By enforcing it to _not_ be the minimum. 20:08:23 CLEVER, NO?! 20:08:32 Whirrrrrrrrr. 20:08:34 Whirrrrr 20:08:36 rrrr 20:08:38 rrrq 20:09:19 What, it returned the 130. 20:09:21 I am the confused. 20:09:29 Hmm, that's: curious. 20:09:46 I will apply the "not thinking about it" tactic. 20:11:26 -!- sebbu has quit (Read error: Connection reset by peer). 20:11:36 ais523: I figure if we get the number of total accounts down to 1,000 or so, it'll be easy to hand-review the remaining ones 20:11:59 -!- sebbu has joined. 20:11:59 -!- sebbu has quit (Changing host). 20:11:59 -!- sebbu has joined. 20:12:12 Okay, here's a generic "return only the user_name's from [query1] that are not returned by [query2]" that might or might not work with MySQL: 20:12:16 Oh god. 20:12:24 SELECT q1.user_name FROM (SELECT user_name FROM user WHERE [query1]) AS q1 LEFT JOIN (SELECT user_name FROM user WHERE [query2]) AS q2 ON q1.user_name = q2.user_name WHERE q2.user_name IS NULL 20:12:34 Oh sure, leave me to do the pastering. 20:12:41 I've left out most of [query1] and [query2] in interests of brevity. 20:13:21 mysql> SELECT q1.user_name FROM (SELECT user_name FROM user WHERE (select count(*) from revision where rev_user = user_id) = 0 and (select count(*) from archive where ar_user = user_id and exists (select * from logging where log_action = 'delete' and (log_namespace = 0 or log_namespace = 2) and log_comment like '%spam%' and log_title = ar_title)) > 0) AS q1 LEFT JOIN (SELECT user_name FROM user WHERE (select count(*) from revision where rev_user 20:13:21 = user_id) = 0 and (select count(*) from archive where ar_user = user_id and exists (select * from logging where log_action = 'delete' and (log_namespace = 0 or log_namespace = 2) and log_comment like '%spam%' and log_title = ar_title and log_namespace = ar_namespace)) > 0) AS q2 ON q1.user_name = q2.user_name WHERE q2.user_name IS NULL; 20:13:28 Wow, it's actually running. 20:13:57 You might've been able to use a NATURAL LEFT JOIN as opposed to LEFT JOIN ... ON q1.user_name = q2.user_name, actually. 20:14:26 -!- azaq23 has quit (Quit: Leaving.). 20:14:28 Empty set (54.86 sec) 20:14:31 Heh. 20:14:34 From this I conclude that 0 = 1 = 130. 20:14:54 ais523: is it safe to delete users in an automated fashion from a database haunted by a ghost? 20:15:05 -!- azaq23 has joined. 20:15:08 elliott: probably not 20:15:09 Where's the min(a2.ar_timestamp) in all of that? 20:15:17 fizzie: Oh. 20:15:22 That's the same query twice, isn't it? 20:15:27 depends on what sort of ghost 20:15:27 It... might be. 20:15:35 It's so dazzling, it's hard to say. 20:15:57 (You want q1 to be the one that returns more rows.) 20:16:07 mysql> SELECT q1.user_name FROM (SELECT user_name FROM user WHERE (select count(*) from revision where rev_user = user_id) = 0 and (select count(*) from archive where ar_user = user_id and exists (select * from logging where log_action = 'delete' and (log_namespace = 0 or log_namespace = 2) and log_comment like '%spam%' and log_title = ar_title)) > 0) AS q1 LEFT JOIN (SELECT user_name FROM user WHERE (select count(*) from revision where rev_user 20:16:07 = user_id) = 0 and (select count(*) from archive a1 where a1.ar_user = user_id and a1.ar_timestamp = (select min(a2.ar_timestamp) from archive a2 where a2.ar_title = a1.ar_title and a2.ar_namespace = a1.ar_namespace) and exists (select * from logging where log_action = 'delete' and (log_namespace = 0 or log_namespace = 2) and log_comment like '%spam%' and log_title = a1.ar_title and log_namespace = a1.ar_namespace)) > 0) AS q2 ON q1.user_name = q 20:16:08 2.user_name WHERE q2.user_name IS NULL; 20:16:10 OKAY HERE WE GO. 20:16:51 SQL: so concise and expressive. 20:17:10 +-----------+ 20:17:11 | user_name | 20:17:11 +-----------+ 20:17:11 | Beary605 | 20:17:11 +-----------+ 20:17:11 1 row in set (53.64 sec) 20:17:14 Finally mathematiques prevails. 20:17:30 ais523: wow 20:17:39 ais523: that's the one user that registered to solely blank a single spam page 20:17:43 we saved them 20:17:50 haha, brilliant :) 20:18:52 fizzie: Did anyone ever make a database where you just plug in propositional logic for the queries? 20:19:29 -!- pikhq has quit (Ping timeout: 245 seconds). 20:19:40 -!- pikhq has joined. 20:19:50 i vaguely recall Altavista had that 20:20:07 -!- Taneb has joined. 20:20:16 what, as in a servery database program thing? 20:20:17 * oerjan slightly wonders why elliott couldn't just use diff somehow 20:20:29 no, as in the search engine. 20:20:31 oerjan: This way was certainly more elegant. 20:20:43 diff would have required copying lots of lines into files 20:20:48 Hello! 20:21:05 hello! 20:21:20 Some of the persistence things might be slightly kinda-sorta like that, but not like that at all. (But you don't write SQL or relational algebra in all of them; they have different sorts of ways of getting results. Though mostly I think just starting with sets and filtering them down using predicates.) 20:21:32 fizzie: No, I didn't say relational algebra. 20:21:39 I want bona-fide set theory. :( 20:23:26 Random esolang idea: all control flow is done by altering the metric of the instruction space. 20:23:36 Phantom_Hoover: DO YOU KNOW WHAT WE'VE BEEN THROUGH 20:23:40 AND ALL YOU CAN TALK ABOUT IS ESOLANGS 20:23:45 * elliott cries 20:23:48 Instructions are continuous, and data storage is also done with metric distortions. 20:23:57 elliott, a metric distortion? If so: do tell. 20:24:55 Phantom_Hoover: SPAM 20:24:57 SPAM EVERYWHERE 20:25:00 SPAM IN THE KITCHEN 20:25:01 SPAM IN THE BED 20:25:03 SPAM IN MY HEAD 20:25:25 did it get in through a metric distortion 20:25:28 yes 20:25:34 how 20:26:32 elliott's kitchen and bed and head are all measured in decimetres 20:26:44 If they were in imperial, everything would be better 20:27:04 Of course, they're based on the old decimetre, that is, the rod of metal in Paris 20:27:21 fizzie: You know, a nice additional condition would be if it excluded users with talk pages... HINT HINT 20:27:32 Also backup to self: select user_name from user where (select count(*) from revision where rev_user = user_id) = 0 and (select count(*) from archive a1 where a1.ar_user = user_id and a1.ar_timestamp != (select min(a2.ar_timestamp) from archive a2 where a2.ar_title = a1.ar_title and a2.ar_namespace = a1.ar_namespace) and exists (select * from logging where log_action = 'delete' and (log_namespace = 0 or log_namespace = 2) and log_comment like '%sp 20:27:32 am%' and log_title = a1.ar_title and log_namespace = a1.ar_namespace)) > 0; 20:27:38 Due to the recent weather, that rod has distorted, bringing chaos to the old metric system 20:28:23 oh 20:28:24 my god 20:28:26 if 20:28:50 Previously, elliott's spam guards were just big enough. But as the parisian rod has shrunk, so has his guards, thus letting in the spam 20:29:01 i do a little upwards flick from 2/3 of the line right before a 1 20:29:05 it looks amazing 20:29:10 can we stop talking about my rod 20:29:10 What rod? 20:29:12 -!- zzo38 has joined. 20:29:12 Phantom_Hoover: what 20:29:16 The parisian rod 20:29:26 is Phantom_Hoover talking about how he writes numbers 20:29:28 please somenoe say no 20:29:45 yes 20:29:49 -!- Taneb has changed nick to somenoe. 20:29:50 No 20:29:54 Aren't there scientific specification of how long a meter is? 20:29:55 Like 20:30:01 -!- somenoe has changed nick to Taneb. 20:30:05 Not in the old system 20:30:05 mRoman: it's the kilogram that isn't "specified" 20:30:09 nowadays 20:30:12 Yes. 20:30:19 this is almost as world-shattering as when I worked out how to write a )( x without lifting the pen 20:30:25 Phantom_Hoover 20:30:27 i'm sorry but 20:30:30 you're REALLY BORING 20:30:44 without lifting the pen sounds like bending the paper 20:31:00 mRoman, the metre is specified in terms of the distance light travels in