00:03:50 I've never heard of such a card. 00:05:00 http://magiccards.info/query?q=!Sublime+Archangel seems to qualify, technically. 00:05:44 (but it's static, not triggered; not sure what zzo38 wants to do) 00:06:29 Fair enough. 00:07:08 -!- roasted42 has quit (Ping timeout: 265 seconds). 00:07:56 Well, I meant one that only applies to tapped creatures rather than all of them. 00:08:33 -!- roasted42 has joined. 00:08:56 (the card is linked from http://mtgsalvation.gamepedia.com/Exalted ; I didn't remember what exaltation does) 00:10:49 zzo38: I doubt that such ccards exist, but which do you want: "all tapped creatures gain exalted" or "whenever a creature is tapped, it gains "exalted"?" 00:15:47 First one 00:17:31 The other kind of card would be one causing all tapped creatures to lose exalted ability. 00:20:03 http://gatherer.wizards.com/Pages/Search/Default.aspx?text=+[exalted] is short, doesn't look like it., 00:26:46 Feels like they didn't do enough with Exalted. 00:31:37 wtf ... youtube's players shows static noise on errors?! 00:31:55 U-S-E-L-E-S-S ! 00:38:44 -!- MoALTz__ has joined. 00:41:17 -!- MoALTz_ has quit (Ping timeout: 240 seconds). 00:45:26 -!- Phantom_Hoover has quit (Quit: Leaving). 00:47:17 -!- roasted42 has quit (Ping timeout: 240 seconds). 00:48:21 -!- roasted42 has joined. 00:51:34 int-e: It's supposed to have an explanation for the error on top of the noise. 00:52:10 (Although that doesn't make the animated noise part any more useful, that's certainly true.) 00:52:13 fizzie: yeah I was looking at the comments. 00:52:48 (I had downloaded the video separately) 00:53:18 * int-e is a bit starved for bandwidth; 16 kB/s isn't much. 01:09:58 -!- shachaf has quit (Changing host). 01:09:58 -!- shachaf has joined. 01:13:15 -!- Phantom_Hoover has joined. 01:13:54 -!- Phantom_Hoover has quit (Client Quit). 01:21:43 -!- boily has joined. 01:29:30 -!- roasted42 has quit (Ping timeout: 250 seconds). 01:35:58 * adu gives int-e some bandwidth 01:36:17 -!- roasted42 has joined. 01:41:20 -!- Sprocklem has joined. 01:52:33 -!- FreeFull has quit (Ping timeout: 256 seconds). 02:04:23 -!- tswett2 has joined. 02:04:46 So I think I found something interesting. 02:05:38 Define a "display" as a set of natural numbers, with the topology over displays being generated by the sets {s : s is a display containing n}, where n is a natural number. 02:06:37 Let ->> denote a continuous function. Then there's a certain "obvious" function encode :: (display ->> display) -> display, with a left inverse decode :: display -> (display ->> display). 02:07:47 Both encode and decode appear to be continuous. 02:08:35 -!- FreeFull has joined. 02:09:13 But lemme start over. 02:11:42 Define a "space" as a set of integers equipped with an equivalence relation. 02:11:53 Natural numbers, rather. 02:12:03 We'll assume that each natural number can be interpreted as a computer program. 02:12:34 Define RE as the set of all computer programs that enumerate natural numbers, with the equivalence relation being that the two programs enumerate the same set. 02:12:38 computer program = partial recursive function? 02:12:58 Something like that. 02:13:34 Given spaces A and B, define A ->> B as the set of all computer programs which take a program in A and return a program in B, respecting the equivalence relation. 02:14:21 Two elements of A ->> B are equivalent if, for every input, the resulting outputs are equivalent. 02:15:15 Then there is a computer program encode :: (RE ->> RE) ->> RE with a left inverse which is a computer program decode :: RE ->> (RE ->> RE). 02:16:04 -!- roasted42 has quit (Ping timeout: 245 seconds). 02:18:10 -!- roasted42 has joined. 02:22:01 -!- Tod-Autojoined has changed nick to TodPunk. 02:24:45 Ok, destroying the abstraction: encode takes a Gödel number g of a program transformation, and returns a program enumerating the singleton set { g }. Decode tkaes a program, runs it until the first element g is produced, then runs g as aprogram transformation. 02:26:09 Ah, I did not clearly separate "Gödel number of a program" from "program". 02:26:26 -!- AndoDaan has joined. 02:28:30 Your definition of encode doesn't respect the equivalence relation. 02:28:57 Since given different Godel numbers that encode the same function, it'll return different functions. 02:29:02 true\u. 02:29:28 what's a Gödel number? 02:30:07 I think int-e is using "program" to mean what I'd call a computable function and "Godel number of a program" to mean what I'd just call a program. 02:30:39 "Godel number of a program" just means a number which encodes a computer program, under a scheme such that every possible computer program is represented (in a computable way) by some number. 02:31:14 no, a program transformation 02:31:37 So lemme try to describe what encode and decode do, exactly. 02:32:44 encode takes a computer program f :: RE ->> RE. It then performs a computation simultaneously for every natural number n. 02:33:21 The computation begins by interpreting the number n as a pair (p, T), where p is a natural number and T is a finite set of natural numbers. 02:33:21 -!- AndoDaan has quit (Ping timeout: 272 seconds). 02:33:41 tswett2: what is RE? 02:34:03 RE is the set of all computer programs that enumerate natural numbers, with the equivalence relation being that the two programs enumerate the same set. 02:34:08 oh 02:34:34 sounds Turing-esque 02:34:51 The computation then proceeds by running f on T. If f(T) ever lists p, then encode(f) lists n. 02:36:00 "encode" is an injective function because every computer program RE ->> RE is defined entirely by its behavior on inputs which enumerate finite sets. 02:37:01 I'm interested in an abstract and yet concrete definition of a thing that can represent threads, coroutines, and continuations all at the same time 02:37:19 A Turing machine, perhaps? 02:37:24 perhaps 02:37:30 Now, decode takes a computer program s :: RE, and returns a new computer program decode(s) which takes another computer program t and finally returns a computer program decode(s)(t). 02:37:31 continuations can represent threads, coroutines, and continuations all at the same time 02:37:43 nys: I'm going to need a citation for that last one 02:37:48 how can continuations represent threads? 02:38:07 i thought you could do cooperative threading <.< >.> 02:38:14 somehow 02:38:27 maybe i need to crack out the ol scheme again 02:38:52 decode(s)(t) performs a computation simultaneously for all pairs (p, T), where p is a natural number and T is a finite set of natural numbers. 02:38:54 the ol scheme? 02:39:05 scheme is new, r7rs was just released 02:39:19 the brand spankin new scheme 02:39:24 Then, uh, lemme see. 02:40:41 Actually, lemme start over with this one. 02:40:44 tswett2: I think we have to talk about termination a bit. 02:41:05 decode(s)(t) performs a computation simultaneously for all numbers n enumerated by s. 02:41:14 nah, the halting problem is so 20th century 02:41:45 The computation consists of interpreting the number n as (p, T), then waiting for t to spit out all elements of T, then spitting out p. 02:41:49 I think D. Knuth might be on to something with BDDs, it totally side-steps the halting problem 02:41:51 -!- roasted42 has quit (Ping timeout: 256 seconds). 02:41:58 int-e: do we? 02:42:07 what is BDD? 02:42:18 vanila: binary decision diagram 02:42:26 also I don't think the halting problem is actually a problem 02:42:31 it's just a fact 02:42:34 tswett2: a program that terminates without producing a number is equivalent to one that never terminates and never produces any number? 02:42:43 vanila: essentially a binary tree representation of a map from [Bool] -> [Bool] 02:42:45 int-e: yeah. 02:42:52 hmm 02:43:06 tswett2: ok. that part screws with my intuition. 02:43:15 You may as well say that no program ever terminates. 02:43:26 If a program would terminate, it instead hangs forever, spitting out nothing. 02:43:49 -!- roasted42 has joined. 02:43:55 D. Knuth, you know the guy who invented the arrow, tex, metafont, taocp, etc. 02:43:59 and MMIX 02:44:02 Knuth is good 02:44:06 He invented some algorithms too 02:44:10 one or two 02:44:21 actually three, at least 02:44:30 LR parsing, KMP string matching algorithm, dancing links 02:44:36 tswett2: ok, back to your decocde(s)(t). 02:44:48 https://en.wikipedia.org/wiki/Knuth%27s_up-arrow_notation 02:44:58 he invented the arrow 02:45:34 Now we just have to invent up-bow notation so that we can perform up-archery notation. 02:45:44 lolol 02:46:11 tswett2: ++ 02:48:52 tswett2: the main property that you're exploioting seems to be that RE ->> RE only allows monotone functions (in terms of the encoded sets), plus a compactness property. 02:49:42 Lessee. I'm exploiting the monotone thing, yeah. As for compactness, lemme think. 02:49:59 I didn't notice any compactness going on here, but you probably know something I don't. 02:51:24 RE is certainly compact, because the only open set containing the empty set is the universal set. 02:52:06 tswett2++ 02:52:40 Look at me, I'm talking about the topology of RE without ever having defined a topology for RE. 02:53:08 i wasn't saying that 02:53:11 but i was thinking it 02:53:45 One topology for RE is that topology I defined for "displays" above. 02:54:16 Namely, the topology for RE is generated by sets of the form {s : s is an element of RE enumerating n}. 02:54:23 Where n is a natural number. 02:57:52 -!- shikhin_ has quit (Ping timeout: 255 seconds). 02:58:46 -!- boily has quit (Quit: NERVOUS CHICKEN). 03:07:14 -!- scoofy has quit (Ping timeout: 244 seconds). 03:15:06 tswett2: I'm just wrong. Continuity of the RE ->> RE part is what you need, for the claim that its determined by the behaviour on finite sets. 03:16:11 Right. 03:16:13 (rather, that *is* the claim, afaiui) 03:16:50 Claim: the behavior of a computer program RE ->> RE is determined by its behavior on finite sets. 03:17:58 Um, lemme think how to prove this. 03:19:10 Suppose f is a computer program RE ->> RE, s is a computer program RE, and f(s) enumerates the natural number n. 03:20:28 Claim: there exists a finite set S such that S is a subset of the set enumerated by s, and f(S) also enumerates the natural number n. 03:20:49 -!- roasted42 has quit (Ping timeout: 255 seconds). 03:21:12 -!- bb010g has quit (Quit: Connection closed for inactivity). 03:21:33 Informal "proof": by something like Rice's theorem, the only way f can analyze its argument is by running it, and f(s) must enumerate n after running s for only finitely many steps. 03:22:39 -!- roasted42 has joined. 03:24:32 Since f is in RE ->> RE, for every computer program s' in RE that enumerates the same set as s, f(s') must also enumerate n. 03:25:05 Ooh, where is this going. 03:27:52 -!- AndoDaan has joined. 03:29:54 I need to prove that there's some computer program S in RE such that S enumerates a finite subset of the set enumerated by s, and S so closely matches some program s' that f can't tell the difference. 03:33:12 Let me start over. 03:33:27 Suppose that f is a computer program RE ->> RE, s is a computer program RE, and f(s) enumerates the natural number n. 03:34:05 Furthermore, assume that whenever t is a computer program in RE that enumerates a finite subset of the set enumerated by s, f(t) does not enumerate the natural number n. 03:34:18 Clearly s enumerates an infinite set. 03:34:30 Let M be an arbitrary Turing machine. 03:35:51 Ah. 03:35:59 Given any computer program u in RE, let stop(u, M) be the program that alternates between running u and running M, halting whenever either one halts. 03:36:09 You're going to run s and T in parallel. Right. 03:36:42 If M does not halt, then f(stop(s, M)) enumerates n, because stop(s, M) enumerates the same set that s does. 03:37:03 If, on the other hand, M does halt, then f(stop(s, M)) does not enumerate n, by our assumption about t. 03:37:34 Right. Now a fixed point, and done. Thanks! 03:37:35 So we can solve the halting problem by simultaneously running f(stop(s, M)) and M, and seeing which thing happens first: f(stop(s, M)) enumerates n, or M halts. 03:44:04 (and monotonicity works similarly: if U \subsetneq V are finite sets, then produce the elements of U, then run M, then product the remaining elements of V) 03:45:09 Oh, I meant to mention "the other topology" on RE. 03:46:34 Let the space Si be the set of all computer programs, with two programs being equivalent if and only if they both halt or neither one halts. 03:49:05 Then an open set of REs is defined by a function RE ->> Si; a RE is in the set if and only if its image halts. 03:49:25 Which isn't actually a topology, even though it's a lot like a topology. 03:50:12 -!- scoofy has joined. 03:50:49 You can't take the union of an arbitrary collection of those; you can only take the union of a recursively enumerable collection of them. 03:51:38 -!- roasted42 has quit (Ping timeout: 250 seconds). 03:52:54 -!- scoofy has quit (Quit: Leaving). 03:53:19 -!- roasted42 has joined. 04:00:47 hmm recursive topology 04:01:10 tswett2: does "Si" have a meaning? 04:02:11 It's the Sierpinski space. 04:03:09 Ah, forgetting about all this extra structure. Yes, of course. 04:05:09 int-e: it also means yes in a couple languages 04:05:46 adu: Really! But it seemed irrelevant to the discussion. 04:05:51 c'est si belle 04:05:51 -!- incomprehensibly has changed nick to glowcoil. 04:06:27 да 04:07:23 תודה 04:08:04 I should try to relearn russian 04:09:17 нет 04:18:37 -!- AndoDaan has quit (Ping timeout: 240 seconds). 04:21:39 adu: вы не понимаете. 04:21:50 meh, even most of the grammar is gone. 04:22:27 (though there's little surprise there, russian has a lot of it) 04:32:29 -!- roasted42 has quit (Ping timeout: 265 seconds). 04:33:11 -!- roasted42 has joined. 04:48:07 -!- adu has quit (Quit: adu). 05:03:41 -!- vanila has quit (Quit: Leaving). 05:03:57 -!- tswett2 has quit (Ping timeout: 240 seconds). 05:06:35 -!- GeekDude has quit (Quit: {{{}}{{{}}{{}}}{{}}} (www.adiirc.com)). 05:14:38 -!- nys has quit (Quit: quit). 05:19:05 -!- Solace has joined. 05:21:09 hmmmm 05:23:29 -!- roasted42 has quit (Ping timeout: 264 seconds). 05:25:16 -!- roasted42 has joined. 05:25:51 How do you set ops/voiced and channel modes 05:29:01 Use the MODE command 05:29:13 See HELP CMODE for descriptions. 05:33:41 -!- augur_ has changed nick to augur. 05:51:15 -!- AndoDaan has joined. 06:01:27 -!- tswett has joined. 06:02:28 -!- shikhin has joined. 06:04:35 -!- adu has joined. 06:07:42 -!- roasted42 has quit (Ping timeout: 265 seconds). 06:09:17 -!- roasted42 has joined. 06:30:15 -!- MoALTz_ has joined. 06:32:37 -!- MoALTz has joined. 06:33:37 -!- MoALTz__ has quit (Ping timeout: 256 seconds). 06:35:08 I got Magic: the Puzzling for the Christmas present. 06:35:14 I figured out a few of them so far. 06:35:15 -!- MoALTz_ has quit (Ping timeout: 244 seconds). 06:55:27 -!- roasted42 has quit (Ping timeout: 258 seconds). 06:57:53 -!- roasted42 has joined. 06:58:26 -!- oerjan has joined. 07:29:09 -!- dts|pokeball has quit (Ping timeout: 256 seconds). 07:34:17 -!- roasted42 has quit (Ping timeout: 264 seconds). 07:35:50 -!- roasted42 has joined. 07:40:37 -!- Sprocklem has quit (Ping timeout: 240 seconds). 07:41:12 -!- Patashu has joined. 07:48:04 zzo38: great 07:48:11 -!- MoALTz has quit (Quit: Leaving). 08:15:39 -!- roasted42 has quit (Ping timeout: 245 seconds). 08:18:24 -!- roasted42 has joined. 08:34:22 -!- roasted42 has quit (Ping timeout: 240 seconds). 08:39:23 -!- AndoDaan has quit (Ping timeout: 240 seconds). 08:39:24 -!- roasted42 has joined. 08:45:05 -!- roasted42 has quit (Ping timeout: 256 seconds). 08:49:00 -!- adu has quit (Quit: adu). 09:02:00 -!- AndoDaan has joined. 09:24:57 -!- ocharles_ has quit (Ping timeout: 258 seconds). 09:25:46 -!- ocharles__ has joined. 09:48:48 -!- shikhin_ has joined. 09:51:37 -!- shikhin has quit (Ping timeout: 240 seconds). 10:12:07 -!- supay_afk has changed nick to supay. 10:20:53 `echo hi 10:20:53 hi 10:21:21 `echo `echo hi 10:21:21 ​`echo hi 10:24:04 fizzie: the wiki - HackEgo link is broken 10:24:22 Oerjan, if I implement BCT in a language but hard code the instructions and init data-string instead of those being inputted, would that detract from its TC-ness? 10:24:40 AndoDaan: no. that's what i did for /// 10:25:10 Okay. I figured, but wanted to make sure. 10:25:13 Called a compiler? 10:25:39 but i don't hold much with this idea some others have of separating input from program when defining TC-ness. 10:26:59 * oerjan is wondering if that idiom he just used actually exists. 10:27:17 coined and minted. 10:27:31 TC-ness is _always_ essentially about compiling 10:27:52 it's just that you get to include the input as well as the program 10:28:30 AndoDaan: this applies to all output-only languages, at least. 10:28:33 oerjan: you must have some way to distinguish input and program, however 10:28:41 coppro: no, you do not. 10:28:46 realtime event handling doesnt' change a language possibillities at all? 10:28:56 you compile a _computation_, not program. 10:29:28 AndoDaan: turing-completeness isn't about that. 10:29:33 mm right the thing I was thinking when I said that is completely stupid 10:29:42 the thing I was thinking before that is more right 10:29:44 I will go with that 10:30:00 Realtime weapon change 10:30:35 it works because of the halting problem 10:30:41 ^ very important, but not to TC-ness, i guess. 10:31:37 No, I mean that the Halting Problem is what lets us ignore the machine/input distinction. 10:32:33 A language is TC if, given a Turing machine with input, you can define some finite process which generates an instance of a program in that language, with input if applicable, which produces the same result. 10:32:48 Computer thrown toward the event horizon of a black hole. Time dilates to infinity, halting problem solved? 10:33:02 You can't use the same definition for more restricted classes of computation, because you can always just run the computation and generate some other computation with the same result 10:33:45 e.g. an NFA-plus-input can be transformed into a DFA-plus-input, because you can just run the NFA, get "accept" or "reject", and then create an accepting or rejecting DFA 10:34:00 but a TM-plus-input can't be run 10:35:25 Non-Deterministic Finita Algorithm? 10:35:35 Automaton* 10:35:57 Well, we're not talking about finite automata 10:36:50 coppro: depends. NP-completeness works essentially the same way as TC, with "finite" replaced by "polynomial-time" or even "logarithmic space" 10:37:52 it works as long as the resources used for "compiling" are less than what you need to solve the problem. 10:39:00 on the other hand you have the circuit complexity classes, where you definitely need to distinguish the input. 10:40:16 (because you are trying to define classes that are _weaker_ than your compiler.) 10:42:15 oerjan: right. 10:43:22 btw, QTMs are shit 10:43:52 hm? 10:44:22 Quantum Turing Machines? 10:44:40 -!- ocharles__ has quit (Changing host). 10:44:40 -!- ocharles__ has joined. 10:44:42 -!- ocharles__ has changed nick to ocharles. 10:45:07 i assumed so, i don't know why he thinks they are shit though. 10:46:05 First correct guess I made here. 10:46:32 I'm getting learn-ned. 10:47:09 ocharles: hey are you the ollie charles of 24 days of haskell fame? great series! 10:47:29 oerjan: that's me! 10:47:32 thank you :) 10:47:44 did you catch this year's series? 10:48:08 i am in the process, i have a bit of reddit catchup to do 10:49:09 i'm up to the template haskell one 10:50:37 ah 10:50:49 i might do 12 in future years, cause no one can read 24 :P 10:51:12 well maybe not if they're all as long as the TH one 10:51:50 yea, the guest posts are longer 11:00:32 oerjan: Oh, right: it needs to be started manually, and Gregor started HackEgo last. 11:01:40 oerjan: In theory, it should be on now. 11:01:53 TOO LATE 11:01:57 TOO LITTLE 11:02:16 (i already did today's edits) 11:11:54 -!- zzo38 has quit (Ping timeout: 258 seconds). 11:14:16 -!- shikhin_ has changed nick to shikhin. 11:14:41 ah yes 11:14:51 I should use a VPS again 11:32:24 -!- SopaXorzTaker has joined. 11:32:24 -!- SopaXorzTaker has quit (Changing host). 11:32:24 -!- SopaXorzTaker has joined. 11:34:54 -!- Patashu has quit (Ping timeout: 258 seconds). 11:51:10 -!- rade has quit (Quit: Leaving). 11:52:59 -!- rade has joined. 12:49:16 -!- coppro has quit (Ping timeout: 258 seconds). 13:04:52 -!- tromp_ has joined. 13:05:49 -!- tromp__ has quit (Read error: Connection reset by peer). 13:08:56 -!- Phantom_Hoover has joined. 13:22:46 Where on the body would a "save your GODDAMN CODE!" tattoo be the most effective? 13:25:11 front of head hth 13:27:22 It does. In pointing out that Prison-Breaking it might be the way to go. 13:28:30 i don't believe putting a tattoo there is actually illegal in most western countries 13:30:07 -!- shikhin has quit (Ping timeout: 256 seconds). 13:36:47 -!- oerjan has quit (Quit: leaving). 13:48:43 -!- coppro has joined. 14:01:06 -!- kallisti has joined. 14:19:02 -!- Lymia has quit (Ping timeout: 245 seconds). 14:26:51 -!- Sprocklem has joined. 14:33:28 -!- shikhin has joined. 14:47:22 -!- boily has joined. 14:50:10 -!- Solace has quit (Quit: Connection closed for inactivity). 14:50:57 -!- nycs has joined. 14:50:57 -!- nycs has changed nick to `^_^v. 14:53:52 -!- Lymia has joined. 14:57:52 -!- GeekDude has joined. 15:08:41 -!- mitchs has joined. 15:31:30 [wiki] [[Talk:Budget]] N http://esolangs.org/w/index.php?oldid=41560 * AndoDaan * (+385) Asking if esolangs.org's the right place for budget. 15:37:35 -!- SopaXorzTaker has quit (Remote host closed the connection). 15:38:08 2See. 15:38:13 s/^2// 16:00:45 fizzie, does a zero length write with W in SOCK make any sense ever? 16:01:11 cfunge checks the length is zero or greater, but I think it should check it is 1 or greater 16:01:21 Going through bugs found with coverity 16:01:44 Deewiant, your opinion would also be interesting ^ 16:04:49 Anyone familiar with the CompCert C compiler? 16:04:50 http://compcert.inria.fr/ 16:10:11 I'm not, but it seems like a very interesting concept. 16:11:15 I wonder if the CompCert C compiler addresses this issue: http://cm.bell-labs.com/who/ken/trust.html 16:12:17 rade, do you trust your verification? 16:12:48 Do you trust that if what you are verifying is true then you can trust the compiler? 16:13:15 The "I didn't read my compiler code" issue can only be solved by reading your compiler code 16:15:21 Taneb, it's supposedly mathematically proved itself. I think this removes the need to trust it. Still, the design of the compiler's proof could be lacking, I guess. 16:15:34 you have to choose what to prove in the design and implementation 16:15:40 rade, there's still a LOT of things you need to trust 16:16:20 Like, do you trust the compiler you used to compile it CompCert? 16:16:48 couldn't CompCert technically compile itself? 16:17:15 I don't know if it does, though 16:17:26 Yes, but you need to bootstrap it 16:17:30 You'd have to bootstrap it from somewhere 16:17:39 You have to trust even more things than the compiler source 16:17:41 If not, you need to obtain the CompCert compiled pre-compiled already from somewhere 16:17:51 Which of course means you need to trust that source 16:18:10 s/the CompCert/& C compiler/ 16:18:26 Of course, how much do you trust your computer itself? 16:18:43 there's always bitflips, right? 16:18:46 I get your point 16:18:58 well, it's a step in the right direction, at least 16:19:06 the less you have to trust the better 16:19:11 It's certainly a step in a direction 16:19:46 You need to trust: the clight semantics, the cambridge x86/arm semantics, the coq binary you used to run the proof 16:19:58 The coq specification of compcert 16:20:25 depends on which computer 16:23:08 -!- mihow has joined. 16:25:53 Vorpal: man 3p write says "If nbyte is zero and the file is not a regular file, the results are unspecified." man 3p send and sendto don't say anything about the zero-length case. SOCK.W is probably meant as a thin wrapper around one of these, and indeed RC/Funge-98 uses send(). Given that it seems to be unspecified I'd allow it; maybe the programmer knows something we don't, at least on the specific 16:25:55 platform he's using, and expects a certain result. 16:26:33 Deewiant, well it causes uninitialized memory in cfunge 16:26:49 And the easiest way to fix it is to check for 1 or more rather than 0 or more 16:26:50 If the "unspecified" means "error out" on the execution platform then your usual error checking should catch that and reverse the IP as usual. 16:27:49 Oh and I use send() as well 16:28:20 Deewiant: that exception is probably there because some packet-based sockets or devices could conceivably allow sending zero-length sockets, even though udp in particular doesn't allow that 16:30:27 zero length packets, not sockets 16:30:31 But yeah probably 16:30:33 yes, sorry 16:31:01 Vorpal: So send(some fd, null, 0, 0) is problematic, or what? 16:32:39 Deewiant, well, first of all, I end up calling malloc(0), which is also implementation defined. On Linux that will in fact return a pointer (to 1 byte). Then I copy 0 bytes into that buffer from funge space. Which I then send with length 0. 16:32:58 On some systems it will error out because malloc(0) can return NULL 16:33:18 What will error out? 16:33:22 Copying 0 bytes out of NULL should be fine 16:33:48 Well, I check malloc return value. So it will error out because I check for successful allocation 16:34:11 Well you should check it only if len > 0 16:35:34 Hm send() with length 0 is not even documented 16:35:47 So that seems like undefined behaviour, not just implementation defined. 16:37:05 On Windows it's ok: 16:37:07 Calling send with a len parameter of zero is permissible and will be treated by implementations as successful. In such cases, send will return zero as a valid value. For message-oriented sockets, a zero-length transport datagram is sent. 16:38:05 -!- tswett has set topic: oerjan doesn't hold much with that idea | but often spelled correctly. | https://dl.dropboxusercontent.com/u/2023808/wisdom.pdf http://codu.org/logs/_esoteric/ http://tunes.org/~nef/logs/esoteric/. 16:39:03 https://bugzilla.kernel.org/show_bug.cgi?id=5731 is a bug about write() not writing a zero-length packet 16:39:34 Deewiant, cfunge doesn't support native Windows anyway, so that seems irrelevant 16:40:26 I'm just pointing out examples where this works or is expected to work 16:41:19 Hm 16:41:27 Makes sense 16:41:39 -!- nys has joined. 16:41:56 You might be able to get away with not actually calling send() but not erroring either, if you want to be difficult about it 16:42:24 Hah 16:45:39 Deewiant, what about the buffer in this case though? 16:47:54 What about it? 16:49:09 Can it be null in this case? 16:50:18 I don't see why not but I'd at least try it on Linux first 16:50:27 Right 16:51:08 Or check the source code of some libcs, etc 16:52:20 who invents all these hundreds of crazy particles? 16:52:27 um, sorry, wrong channel 16:53:38 Deewiant, what do you use for randomness in CCBI(2) btw? 16:53:57 -!- AndoDaan has quit (Read error: Connection reset by peer). 16:54:21 -!- AndoDaan has joined. 16:54:24 Vorpal: Re. Coverity, did you do the whole signup process and whatnot that they at least used to require, or do you have (or is there nowadays) some easier way to access it 16:55:23 Deewiant, well I had to login with my github login, add the project and provide some info about it, including an indication that I was related to the project in some way. 16:55:27 Looks like Mersenne Twister for randomness; I actually thought it was KISS 16:55:30 Then they had to verify it 16:55:39 Which took a couple of days, probably due to the holidays 16:55:56 So in short it's still a hassle, ok. :-) 16:55:57 Deewiant, it only supports C/C++, Java and C# though 16:56:08 So CCBI won't have much use for it 16:56:12 Oh, they have C#, didn't know 16:56:17 I thought it was only C, C++, Java 16:56:18 Apparently 16:56:32 Maybe it is new? Who knows 16:56:40 But yeah, CCBI is pretty much frozen anyway, just wondering 16:56:51 Deewiant, Anyway, KISS? As in keep it simple stupid? 16:57:04 Meaning random() from the standard library 16:57:17 Or is KISS a separate badly named algorithm? 16:58:04 Coverity complains that I use random(). So that was why I was wondering 16:58:17 In other words: don't use cfunge to implement SSL? 16:58:42 Can't find a good source for it but it's a different generator, one of Marsaglia's 16:59:12 I ran both CCBI and cfunge through the dieharder tests at some point and cfunge got pretty poor results, random() would explain that 17:01:12 Heh 17:01:26 Deewiant, ? is even random() % 4 iirc 17:02:25 The range of random() is probably a power of two so that % is probably fine 17:04:20 17 defects in total. Quite a few edge cases (mostly related to improper error handling, such as not freeing memory when the second of a series of malloc fails or similar). No really big issues for normal usage though. Also 4 false positives (all "high impact"). Plus 3 instances of random() 17:05:09 Deewiant, the random() % n in FIXP D is probably worse 17:05:09 Run the clang static analyzer and see if it catches the same ones (though I doubt it complains about random()) 17:05:18 Yeah that's not nice 17:05:24 I have used clang static analyzer in the past 17:06:07 In my experience it finds rather long and complicated chains of events mostly after the first time I used it. Most of them being impossible. 17:07:20 Deewiant, but I don't have a modern llvm version on this machine I think, I might try it later though, but it should be clean from real defects at least as of clang a year or so ago 17:08:44 Odd if it misses all of those "missing free" cases 17:08:46 Hm also this is annoying, some weird issues in an implementation of strstr (I have copies of the glibc str* functions I need for funge-space sizes) 17:08:50 But yeah it has false positives of its own 17:09:21 Well, it did back then at least. Coverity also missed at least one. Though perhaps it only report the first issue of a kind in a given function? 17:09:37 Could be 17:11:31 > iterate (\x -> ((x ^ 2) `div` 100) `mod` 10000) 7835 17:11:32 [7835,3872,9923,4659,7062,8718,35,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0... 17:12:21 Hm? 17:13:13 > iterate (\x -> ((x ^ 2) `div` 100) `mod` 10000) 7838 17:13:14 [7838,4342,8529,7438,3238,4846,4837,3965,7212,129,166,275,756,5715,6612,7185... 17:13:22 There we go. 17:14:26 What is that sequence about? 17:14:57 Middle-square pseudorandom numbers. 17:15:29 Ah 17:16:35 > iterate (msq 100) 1234 17:16:37 [1234,5227,3215,3362,3030,1809,2724,4201,6484,422,1780,1684,8358,8561,2907,4... 17:16:45 > iterate (msq 10000) 12345678 17:16:46 [12345678,41576527,60759738,74576182,60692169,53937792,28540583,56487797,871... 17:16:53 And so on and so forth. 17:19:07 Deewiant, I did find an interesting issue actually, but again, if IP duplication fails, which requires OOM to happen. 17:21:15 Yeah it's too bad that never actually happens; all that code just waiting to be executed 17:21:53 Hah 17:22:01 Deewiant, what should happen when t fails hm? 17:22:16 The parent can hardly be reversed, that is undetectable from the child 17:22:32 Reverse the parent but don't create a child 17:22:44 Really? 17:22:48 Why not? 17:22:58 Well okay 17:23:01 The program should notice that one of its threads is missing :-P 17:23:10 Not like that code will ever be hit anyway 17:28:20 -!- nortti has changed nick to lawspeaker. 17:28:43 Deewiant, not sure what to do about randomness though... Is it worth using urandom if that exists or something like that? 17:28:45 Hm 17:29:12 -!- bb010g has joined. 17:29:20 -!- lawspeaker has changed nick to nortti. 17:29:39 /dev/urandom is a bit slow if you don't need a CSPRNG 17:29:57 True 17:30:34 So what good options are there hm? Adding in another external library seems annoying 17:30:57 And I don't know what algorithms are good 17:31:37 I used to have the mersenne twister just rolled in as one file (since then it appeared in the standard library of the time) 17:31:46 Most RNG's aren't that big, you can just drop them in 17:31:58 -!- myndzi has quit (Quit: .). 17:32:33 -!- myndzi has joined. 17:33:36 E.g. xorshift* is quite good and something like 10 lines: https://en.wikipedia.org/wiki/Xorshift#Variations 17:33:50 Why doesn't random() in libc use it then? 17:35:53 -!- myndzi has quit (Client Quit). 17:35:56 -!- myndzl has joined. 17:36:02 man 3p random suggests that a specific algorithm is required 17:37:22 -!- myndzl has quit (Client Quit). 17:37:32 -!- myndzi has joined. 17:37:35 Oh and there's arc4random in libbsd, which is good 17:37:52 just use /dev/random and fuck everything 17:38:12 But it's also a CSPRNG, I don't know how it compares to /dev/urandom in speed 17:38:45 Ah 17:40:59 Deewiant, Well, libbsd is not universal (cfunge does optionally use strlcpy/strlcat from it, if not found it uses it's own copy of those instead) 17:41:26 Yes but you're allowed to depend on things :-P 17:41:52 -!- nortti has changed nick to lawspeaker. 17:42:01 -!- lawspeaker has changed nick to nortti. 17:42:11 -!- myndzi has quit (Client Quit). 17:42:29 -!- myndzi has joined. 17:42:31 -!- myndzi has quit (Remote host closed the connection). 17:42:40 Yes, but no reason to do it if I don't need to. Anyway I want a fast algorithm 17:42:56 Mersenne twister (while not a CSPRNG) is fast isn't it? 17:43:07 and that xor thing 17:43:39 -!- myndzi has joined. 17:43:51 Deewiant: it's fast enough that openbsd could make random() use it 17:44:55 Yeah sure, /dev/random on Linux is the only thing that's actually "slow" in some absolute sense 17:45:08 oh this is cfunge we're talking about :P 17:45:15 better use xorshift for the speeeeeeeed 17:45:51 /dev/urandom pushes some 17 MiB/s on this box and how likely is that to bottleneck even a randomness-heavy Funge program 17:45:52 Hm arc4random doesn't allow initializing with a fixed seed to cause a repeat? 17:46:46 That is annoying, since I use that feature for fuzz testing (to ensure I test the same program when I run it normally and then under valgrind) 17:46:48 Deewiant: I guess if it doesn't slow down mycology or fungot he won't care 17:46:48 elliott: you probably want anyway) to find where the code is not. it just means that if your program uses them to debug a hq9+ program if he can't help you 17:47:12 elliott, hah 17:47:14 Vorpal: You need to provide a dummy /dev/urandom for arc4random_stir :-P 17:47:22 a dummy getentropy too 17:47:24 if it's using that 17:47:27 which I hope it is 17:47:39 Deewiant, that sounds a lot more annoying than #define FUZZ_TESTING causing srandom() to use a static value 17:47:43 @metar CYQB 17:47:44 CYQB 301700Z 25012G17KT 25SM FEW040 FEW170 M17/M24 A3033 RMK SC1AC1 AC TR SLP277 17:47:53 elliott: The manpage just says "arc4random_stir() function reads data from /dev/urandom" 17:47:57 (it probably even calls it directly sine I don't think there's any libc wrapper yet) 17:47:58 elliott, is that a system call? I don't have a man page for it 17:48:11 Deewiant: yeah but the openbsd people wanted getentropy added specifically I think 17:48:14 at least, it comes from openbsd 17:48:15 Vorpal: It's a rather recently added syscall 17:48:23 Depending on your kernel you might not have it yet 17:48:25 Oh that thing 17:48:28 wasn't it openssl? 17:48:33 Vorpal: it's /dev/urandom that works in a chroot etc. and doesn't use an fd and can block if the entropy pool hasn't been filled yet 17:48:35 3.13, who knows 17:48:46 (not the same as /dev/random, /dev/random starts blocking again for ~no reason even once it has entropy) 17:48:47 Vorpal: Re. fuzz testing you can of course define your randomness function to use a different RNG when fuzzing 17:49:31 Deewiant, well yeah that works I guess, just revert to the old random() with fixed srandom() in that case 17:49:48 elliott: TBH I don't see why they didn't fix /dev/random instead 17:50:27 -!- AndoDaan has quit (Quit: bbl). 17:50:31 Deewiant: that still doesn't work inside chroots (think containerisation) and uses an fd 17:50:42 Deewiant, that could be missing in a chroot, or you could have used up all your file descriptors 17:50:46 there are actual cases of programs falling back to bad entropy when they run out of fds that openbsd ran into IIRC 17:51:11 "bad entropy" is one of those "bad Xs" that means "not X" 17:51:13 chroots could just populate their /dev appropriately... but yeah the fd issue is a good point 17:51:37 also it's faster I think? 17:51:43 since it skips a lot of overhead 17:51:51 Yeah it should be 17:51:58 I mean it's not like linux is exactly a paragon of syscall minimalism / everything is a file 17:52:03 Oh god, cmake I hate you. Never again will I use cmake for a project. 17:52:05 so they might as well just provide it this way 17:52:18 Vorpal: What's a good alternative? 17:52:26 Deewiant, well that is the issue, there isn't one 17:52:30 elliott: I still wonder about my question though, just without the "instead" 17:52:38 Deewiant, autoconf + tup maybe? 17:52:51 Vorpal: auto* is not a good alternative in my mind :-P 17:53:06 Deewiant, well it is easier to do some of the stuff I'm doing with that actually. 17:53:07 Deewiant: I don't know. I guess whoever's in charge of /dev/random doesn't understand information theory? 17:53:32 Deewiant: it's probably easier to keep it broken and hope everyone forgets about it than to force programs to check whether /dev/random is okay or not 17:53:52 elliott: I think it's pretty clear that wasn't the case originally but by now and especially with getentropy you'd think something would change... 17:54:06 Er, was the case* that that person didn't understand 17:54:08 elliott, Why did it block even when there is entropy btw? 17:54:22 Vorpal: because you can "run out of entropy" (you can't) 17:54:25 elliott: I'd still fix it but call it deprecated, there are programs that read from only it 17:54:47 Although maybe all the major ones are switching to getentropy as soon as it's available 17:54:58 Vorpal: (I've seen that analogised as "running out of key" when encoding a lot of messages with a stream cipher) 17:55:36 elliott, didn't it use entropy to seed a generator? Or did it just return the entropy directly as the random data? 17:55:43 I guess the latter case could break stuff 17:55:46 it feeds it through a CSPRNG yes 17:56:08 Then you can't run out as far as I understand indeed (though I'm no expert in this area) 17:56:09 it even keeps adding entropy later, which is harmless and sort of very minorly good but not really necessary at all 17:56:21 it's just its entropy estimate goes down when you read from /dev/random 17:56:23 for some reason 17:56:42 Vorpal: http://www.2uo.de/myths-about-urandom/structure-no.png 17:56:54 the problem with /dev/urandom is that it doesn't block when you *do* want it to (at boot, before there's a reasonable (~128 bits) amount of entropy) 17:57:11 but /dev/random blocks after that too 17:57:25 on e.g. FreeBSD, /dev/{u,}random are the same and block at boot and never otherwise 17:57:33 linux will never do that though because backwards compatibility >_< 17:57:42 Heh 17:58:18 Deewiant, that looks like it sometimes just returns the entropy pool data raw? 17:58:19 Hmm, alias /dev/{u,}random to sockets that talk to /dev/random on a FreeBSD box? 17:58:26 Deewiant, hah 17:58:59 /dev/random does go through the CSPRNG do, or at least so I've heard... if that diagram suggests otherwise I'd be inclined to not believe it 17:59:04 *too 17:59:09 Vorpal: Oh whoops wrong one, http://www.2uo.de/myths-about-urandom/structure-yes.png 17:59:29 The one I linked earlier was the "what you might think" version 18:00:01 nice 18:00:02 Hm 18:00:08 deliberately misleading diagram with no big red warning sign on it 18:00:19 how many reddit/HN comments has it been linked from to support an argument 18:00:26 It has "no" in the filename, you'd think that's enough 18:01:07 It says "[a]n incorrect view" almost immediately before it on the HTML (in red, even) but yes, not in the image itself 18:01:38 I feel like if you show people the wrong version first it's the one they'll remember... 18:02:24 Maybe 18:03:58 -!- Sprocklem has quit (Ping timeout: 244 seconds). 18:05:26 "Counting entropy" 18:05:53 there's a little gnome in the kernel who pushes a button whenever it sees a bit that surprises it <_< 18:06:36 I really, really don't want gnome in the kernel 18:20:33 Jafet, don't worry, it will be systemd instead 18:24:01 Deewiant, an issue with arc4random_uniform is that it is 32-bit, cfunge can have 64-bit cells. 18:25:02 What would a good way to generate a 64-bit random value with arc4random be? For the case of whole bytes, arc4random_buf could be used. 18:25:14 But I don't know for the case of [0,max] 18:25:26 elliott, ^ 18:25:28 arc4 is 8-bit 18:25:35 u_int32_t 18:25:35 arc4random_uniform(u_int32_t upper_bound); 18:25:40 Doesn't look like it? 18:25:50 Or the man page is lying 18:25:57 I see 18:26:21 You can, of course, construct a 64-bit random in parts 18:29:04 Jafet, what is a good way to do it though? For a specific upper bound between 2^32 and 2^64? 18:29:18 Vorpal: Use arc4random_buf to generate 64 bits in one go? 18:29:22 Sorry, for an arbitrary rather than specific 18:29:40 Deewiant, But I don't want to do % after to limit it to an upper bound. I'm asking for that specific case. 18:30:00 How do I best limit it to a a range [0,n] for any n 18:30:01 Well if your upper bound fits in less bytes then pass a smaller length to arc4random_buf 18:30:09 And then you'll have to use % 18:30:23 Deewiant, and if my n is a number that isn't a power of 2? 18:30:26 I suspect that this arc4random_uniform uses rejection sampling 18:30:31 Ah 18:30:49 So it takes an indeterminate amount of time perhaps. 18:30:58 arc4random_uniform() will return a uniformly distributed random number less than upper_bound. arc4random_uniform() is recommended over construc‐ 18:30:59 tions like “arc4random() % upper_bound” as it avoids "modulo bias" when the upper bound is not a power of two. 18:31:02 Vorpal: Then toss the result if it's in an uneven range 18:31:14 Deewiant, fair enough 18:31:57 (Is "rejection sampling" the fancy term for that?) 18:32:49 -!- adu has joined. 18:35:56 -!- dts|pokeball has joined. 18:36:49 If by "that" you mean rejection sampling, yes 18:37:56 You could just write a uint64_t version of http://svnweb.freebsd.org/base/head/lib/libc/gen/arc4random.c?view=markup#l270 18:38:58 I'm surprised that they actually allow an infinite loop there 18:39:14 That's a clever min 18:39:52 (Or at least not-yet-known-to-be-finite, given that this is arc4 output.) 18:40:03 Yeah that seems bad 18:40:19 For cfunge it won't matter, but imagine what that will do to a real time system 18:40:28 But then again I doubt freebsd is a real time OS anyway 18:41:24 I'm not sure if the kernel uses that function 18:41:51 I think OpenBSD does at least 18:41:58 Or maybe not that function, but arc4 18:42:07 Pretty sure /dev/random on OpenBSD is arc4-based 18:49:37 -!- rade has quit (Ping timeout: 255 seconds). 19:04:49 -!- kallisti has quit (Ping timeout: 245 seconds). 19:14:17 -!- Guest36924 has joined. 19:15:11 hello 19:16:21 -!- Guest36924 has left. 19:19:01 -!- nycs has joined. 19:20:39 -!- `^_^v has quit (Ping timeout: 245 seconds). 19:29:41 -!- shikhin_ has joined. 19:32:08 -!- rade has joined. 19:32:50 -!- shikhin has quit (Ping timeout: 250 seconds). 19:55:12 -!- shikhin_ has changed nick to shkhn. 19:56:50 -!- shkhn has changed nick to shikhin. 20:06:10 -!- nycs has quit (Quit: This computer has gone to sleep). 20:09:55 -!- nycs has joined. 20:44:05 -!- MoALTz has joined. 20:51:16 -!- oerjan has joined. 20:54:37 -!- augur has quit (Ping timeout: 240 seconds). 20:59:12 -!- augur has joined. 21:01:23 -!- augur_ has joined. 21:03:24 -!- nycs has changed nick to `^_^v. 21:05:04 -!- augur has quit (Ping timeout: 255 seconds). 21:12:00 -!- Patashu has joined. 21:26:55 -!- oerjan has quit (Quit: ZZZZ). 21:42:00 -!- zzo38 has joined. 21:48:30 -!- _2_Leenz2 has joined. 21:48:34 <_2_Leenz2> Haii 21:48:37 You could just write a uint64_t version of http://svnweb.freebsd.org/base/head/lib/libc/gen/arc4random.c?view=markup#l270 <-- that is rather interesting code 21:48:47 I wonder why it works actually 21:48:52 Will have to look into that 21:49:00 <_2_Leenz2> Hai :D 21:49:44 Jafet, specifically the claim that p > 0.5 21:49:51 -!- _2_Leenz2 has quit (Client Quit). 22:06:56 Vorpal: simple math. if upper_bound <= 2^31 then min < 2^31 because min < upper_bound; otherwise, min < 2^31 becaues 2^32-upper_bound < 2^31. 22:07:45 so (2^32-min) / 2^32 > 2^31/2^32 = 0.5 22:08:17 Hm, that will scale to 64-bit I presume? I think it is way too late for me to implement this given that I can't figure this out 22:09:02 sure. 22:09:12 Just replace u_int32_t, and then use arc4random_buf(&my64bitint, 2) instead of arc4random() 22:09:53 Deewiant, btw did you test that randomness thing with efunge too? If so, how did it fair? 22:09:56 looks plausible (didn't check the API) 22:10:14 Vorpal: Nah, only CCBI and cfunge 22:10:30 -!- Phantom_Hoover has quit (Ping timeout: 265 seconds). 22:10:38 Deewiant, Do you still have the code for it? 22:11:01 -!- Phantom_Hoover has joined. 22:11:46 Not sure but it would be pretty easy to recreate anyway 22:12:40 $ cat rng.b98 22:12:43 4v > 0v >$'@*\88+*+\4*++, 22:12:44 >#v? 1>\1-:!#^_ 22:12:47 > 2^ 22:12:48 > 3^ 22:12:51 I think that's it 22:13:02 Seems to generate something pretty random-looking at least 22:13:27 What test did you use did you say? 22:13:32 dieharder 22:13:48 http://www.phy.duke.edu/~rgb/General/dieharder.php 22:15:42 [wiki] [[Budget]] http://esolangs.org/w/index.php?diff=41561&oldid=41559 * BCompton * (+10) Stub 22:16:28 -!- adu has quit (Quit: adu). 22:53:22 In file included from ../../src/prng.c:33:0: 22:53:22 void arc4random_addrandom(u_char *dat, int datlen); 22:53:25 Massive fail :P 22:53:30 err 22:53:33 /usr/include/bsd/stdlib.h:52:27: error: unknown type name ‘u_char’ 22:53:36 That bit 22:54:23 -!- ^v has joined. 22:55:35 Can't find a header with it either... 22:56:29 -!- tswett has quit (Ping timeout: 245 seconds). 23:03:42 -!- `^_^v has quit (Quit: This computer has gone to sleep). 23:04:47 -!- ^v has quit (Quit: Leaving). 23:07:06 -!- mihow has quit (Quit: mihow). 23:11:13 Deewiant, arc4random is indeed very fast, I did some quick tests with it. It is slightly slower than the built in random() % 4 23:11:31 I basically did "build/release/cfunge examples/prng.b98 | wc -c & sleep 5; killall cfunge; sleep 0.1; echo" a few times over and averaged the results 23:12:30 1548288.5 for arc4 (with 4 passed to proper modulo handling function) vs 1617920.9 for random() % 4 23:12:42 That is not too bad at all 23:28:56 -!- adu has joined. 23:33:02 When trying to edit c2 wiki I get "Suspicious source (tor.ahbl.org)". Do you know what that is? 23:34:25 zzo38, Oh, fun... I heard about this. Basically tor.ahbl.org *was* a DNS blacklist for Tor exit nodes. But it shut down recently. The result is that it returns that all IPs are exit nodes... 23:34:40 You need to contact the admin of that wiki I suspect 23:38:38 SQLite uses ARCFOUR for random number generators. What do the numbers 1548288.5 and 1617920.9 mean exactly? 23:39:18 zzo38, Should be obvious from the command line? 23:39:29 build/release/cfunge examples/prng.b98 | wc -c & sleep 5; killall cfunge; sleep 0.1; echo 23:39:55 It is the average of 5 runs of that 23:40:19 You didn't tell me it is the average. 23:40:22 Highly unscientific measurement of course, but good enough to show that the performance is only slightly worse 23:40:29 zzo38, I did 23:40:31 I basically did "build/release/cfunge examples/prng.b98 | wc -c & sleep 5; killall cfunge; sleep 0.1; echo" a few times over and averaged the results 23:40:37 O, OK 23:40:54 I didn't tell you it was 5 times 23:41:21 The average of what, the output of wc -c or what, and what does prng.b98 do exactly? 23:42:08 zzo38, that is the program Deewiant provided earlier 23:42:24 OK 23:42:26 Just a few lines above 23:42:39 zzo38, And yes the output of wc -c. 23:42:44 What else is there? 23:42:47 The job ID?! 23:42:53 Vorpal: funny, I'd always do it the other way around; output a fixed number of characters and time that. (either by putting a loop in the program or by using head -c) 23:43:02 O, so is it checking how many characters it can output in 5 seconds? 23:43:21 int-e, well that works too. Probably better too. Didn't want to rewrite the program though 23:43:34 head -c would have worked yes 23:43:55 int-e: That is what confused me too, although I would have done yet another different way 23:44:04 int-e, except what does that do with full buffering? Pretty sure full buffering is going on 23:44:14 Err that was badly worded 23:44:57 Put the timing in the program itself or time how many times you can execute the program or something like that, is what I have done in my own cases 23:45:07 Vorpal: well, are you sure your program flushes its buffer when its killed? it comes down to that... in any case I'd make sure the count is not too small 23:45:22 That is mainly the confusion I have had with it 23:45:47 Although it is obvious what you have done now, I just didn't notice quite at first 23:46:03 int-e, well if it didn't I should get various multiples of fixed sizes every time, no? 23:46:32 Vorpal: perhaps. 23:48:12 Deewiant, dieharder does not run fast :/ 23:50:31 If the range of the random numbers aren't a power of two then you need to do something else; what I have done in such case is to first take the number of bits needed, and then if the number is too big try again until it is not too big. 23:53:27 -!- pallokolmio has joined. 23:53:32 What is done by the card DIGGER in Pokemon cards is basically an optimization of this algorithm for the case: if random(0 to 2) < 2 then hits your own card else hits opponent's card. Since the bit1 is 0 then it is known true you needn't read the next bit.