00:00:08 <fizzie> Oh, there are details, too. Motorola is building these chips; the model number is "BT 952000". 
00:01:52 <oerjan> do they come with that leap year bug that Zune got from that Motorola spinoff? 
00:02:32 <ehird> BT 952000 --http://www.hiddenmysteries.org/themagazine/vol8/articles/montex.shtml 
00:02:38 <ehird> so, some consistency' 
00:03:12 <fizzie> Yes; I didn't know that the corporation called "Lucent" got its name from "LUCifer ENTerprises". 
00:03:17 <fizzie> One would think that's not very good PR. 
00:03:24 -!- Judofyr has quit (Remote closed the connection). 
00:06:11 * oerjan now wants to look up dev.* corporation names :D 
00:08:22 <oerjan> i suggest staying away from Canada's DEVCO 
00:10:35 -!- fizzie has set channel mode: -o fizzie. 
00:10:49 <fizzie> Incidentally, have to sleep; do you want me to leave that +t on or what? 
00:12:24 <kerlo> -t is nice when you have no trolls. 
00:15:28 <fizzie> I'm not that sure that particular topic-sillitude will not come back, but I guess there's not much Real Talk during the "night-time" anyway. 
00:15:43 -!- ChanServ has set channel mode: -t. 
00:15:52 <fizzie> Sleepitude, now; g'night. 
00:16:51 <oerjan> WE ARE DOOMED! DOOMED, I SAY! 
00:21:53 <ehird> I just made a great misreading 
00:21:57 <ehird> "with enough bugs, all eyes are shallow" 
00:22:23 <oerjan> THEY ARE EATING OUR EYES! AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
00:29:09 -!- bloreg has quit. 
00:29:09 -!- puzzlet_ has joined. 
00:29:17 -!- puzzlet_ has quit (Read error: 104 (Connection reset by peer)). 
00:31:49 -!- kar8nga has left (?). 
00:34:11 -!- puzzlet_ has joined. 
00:36:33 * ehird puts a black background on everythin before his eyes cave in 
00:38:03 <oerjan> BLACK IS THE (NON-)COLOR OF EVIL 
00:39:25 <ehird> dear apple: i would like a free leopard upgrade so that I don't get ugly white window mesh clashing with my ultimat blakk 
00:42:00 -!- puzzlet has quit (Read error: 110 (Connection timed out)). 
00:47:53 -!- GreaseMonkey has joined. 
01:08:43 <AnMaster> ehird, can't you change theme in OS X? 
01:08:51 <ehird> Not the window chrome, no. 
01:08:59 <ehird> Didn't you know that Apple is always right? :-P 
01:09:08 <AnMaster> ehird, you just said they weren't? 
01:09:17 <ehird> Steve Jobs would disapprove of your sacrelige of his perfect design. 
01:09:21 <ehird> You uncouth savage. :D 
01:10:03 <AnMaster> NEWS: Today ehird was making fun of Apple. Read more on page 7, 9, 12-13 and 17 
01:10:06 -!- Vendan has joined. 
01:10:29 <ehird> I'm sure I've done that before :| 
01:10:49 <AnMaster> no you complained when I was doing it! 
01:11:38 <ehird> I wonder if Apple stopped disobeying their own HIG in 10.5. 
01:11:40 <AnMaster> ehird, anyway, iirc you can change theme even on windows xp 
01:11:57 <ehird> AnMaster: Human Interface Guidlines 
01:12:29 <ehird> They sa(y|id) metal chrome should be used only for apps that are similar to real-world devices 
01:12:37 <ehird> but I don't think Safari, a web browser, fits that definition. 
01:12:47 <ehird> maybe it's imitating a refridgerated-mounted browser 2000 
01:12:48 <AnMaster> ehird, oh? iirc finder had the metal look in 10.4 
01:13:03 <AnMaster> what on earth is it in real world? 
01:13:10 <ehird> Uh. A filing cabinet? XD 
01:13:16 <ehird> about the only time where apple listens to that guideline is with calculator. 
01:13:20 <ehird> Which looks like ar eal calculator at a glance. 
01:13:45 <ehird> I mean Calculator.app. 
01:13:53 <AnMaster> ehird, ok, maybe they are separate 
01:14:03 <ehird> One is a graphing calculator, one is a regular calculator :P 
01:14:12 <AnMaster> ehird, well I have no regular calc 
01:14:15 <ehird> Although Grapher.app is metal in 10.4, too... 
01:14:39 <ehird> I want a TI-83 & an HP. Because that's like using both vi and emacs. 
01:15:31 <AnMaster> ehird, had to replace the batteries once the in the ~6 years or so that I had it 
01:16:35 <AnMaster> doesn't use much power at all since those are 4 AAA 
01:17:29 * ehird examines how hard it'd be to rescheme cgit to fit with the rest of his design 
01:17:49 <ehird> http://hjemli.net/git/cgit/about/ 
01:18:14 <ehird> ... yes, yes it is. 
01:18:24 <AnMaster> ehird, do you re-scheme google? 
01:18:36 <ehird> It's a piece of software. 
01:18:38 <ehird> That you install on your server. 
01:18:40 <ehird> To view repositories. 
01:18:50 <AnMaster> but you talked about desktop apps 
01:19:01 <ehird> I know. It was a seperate musing. 
01:19:02 <AnMaster> I thought you planned to use greasemonkey or something 
01:19:23 <AnMaster> change the layout of every page you visit 
01:19:29 <ehird> http://userstyles.org/ 
01:19:35 <ehird> The interwebs are way ahead of you, mon. 
01:19:48 * AnMaster doesn't use greasemonkey himself 
01:20:04 <ehird> GreaseMonkey: If you don't want to be pinged, stop infringing on intellectual property. :P 
01:20:18 <ehird> I was being sarcastic. 
01:20:23 <AnMaster> I would assume greasemonkey is GPL 
01:21:07 <ehird> hmm. making cgit fit into a 33em (base = 16px) layout could be hard. 
01:21:11 <ehird> Solution: expand the width for those pages. 
01:21:27 <ehird> GreaseMonkey: Quite. 
01:21:35 <ehird> It is also a monkey. That is greasy. 
01:21:45 <GreaseMonkey> anyways, back to what i was doing (teaching starnes how to rickroll on a keyboard) 
01:22:15 <ehird> "I learned a song yesterday, come see!" 
01:22:20 <ehird> "Dun dan dun dun dan dun-dun-dun" 
01:22:21 <GreaseMonkey> AnMaster: there's more horrible songs than that 
01:22:26 <ehird> "Dun dun dun dun dun, dun-dah-dah-dah!" 
01:23:21 * ehird likes how his irc bouncer + client handle logging the whole of #wikipedia and playing it back immediately on reconnect with only a few seconds of lag 
01:24:32 <ehird> also, I propose this become the next rick roll: http://uk.youtube.com/watch?v=nuyY9WjNpgs 
01:24:54 -!- jix has quit ("Computer has gone to sleep"). 
01:30:54 * oerjan didn't notice the # on wikipedia first, and was sorta skeptic 
01:32:13 -!- Sgeo has joined. 
02:04:34 <AnMaster> <GreaseMonkey> GbMaj7, Ab, Fm, Bbm <-- chords? 
02:04:50 <kerlo> GbM7 isn't much of a note. 
02:05:20 <AnMaster> GreaseMonkey, so what about the actual melody? 
02:05:26 * kerlo thinks, "G flat? What kind of crazy key is this?" 
02:05:40 <AnMaster> <kerlo> GbM7 isn't much of a note. <-- several 
02:06:23 <GreaseMonkey> also, the melody is covered by a different instrument, i think 
02:06:30 <kerlo> Let's see. A minor, five fifths down... 
02:06:52 <kerlo> That's B flat minor, all right. 
02:07:52 <AnMaster> kerlo, I was trying to figure out the chord too 
02:08:27 <AnMaster> no I fail at this time of the night 
02:08:31 <kerlo> Now someone quickly get me a program or an applet or something that can play me those chords. I don't want to wake anyone up with the piano and I'm not very good at sonification. 
02:08:49 <AnMaster> kerlo, well I connected my headset to my synth 
02:09:06 <AnMaster> though it probably uses samples 
02:10:02 <AnMaster> hm the keyboard claims that is Ebm(add9) 
02:10:06 <kerlo> Yell if you see a Cb or an Fb in any of these. 
02:10:30 <kerlo> Ebm(add9)? It doesn't even *have* an Eb, does it? 
02:11:02 * AnMaster pulls the power plug and hopes it helps to reset it 
02:11:31 <kerlo> Ebm(add9) is Eb, Gb, Bb, F. 
02:12:17 <AnMaster> ok my fault, I hit the wrong key -_- 
02:13:00 <AnMaster> kerlo, does that match better? :P 
02:13:17 <kerlo> Ab is Ab, C, Eb; Fm is F, Ab, C; Bbm is Bb, Db, F. 
02:13:37 <kerlo> F#M7 is enharmonic to GbM7. 
02:14:00 <kerlo> I loathe treating enharmonics as the same, but only a little. 
02:14:39 <AnMaster> kerlo, depends on which way you take it 
02:25:40 -!- Sgeo has quit (Remote closed the connection). 
04:36:03 -!- Sgeo has joined. 
05:19:48 -!- Sgeo has quit (Remote closed the connection). 
05:29:11 -!- oerjan has quit ("Good night"). 
05:48:34 -!- Sgeo has joined. 
06:57:00 -!- Sgeo has quit (Read error: 110 (Connection timed out)). 
07:59:59 -!- clog has quit (ended). 
08:00:00 -!- clog has joined. 
08:01:31 <oklosol> lol. my dream just reminded me i need to renew my library books xD 
08:01:42 <oklosol> also i slept like 13 hours 
08:05:05 <oklosol> ais523: also, yay for a client that stores topic history <<< yeah i wish mine did, i mean when someone changes the topic, there's essentially no way to get the old one back. 
08:09:19 <oklosol> ehird: freenode don't do that kind of thing. <<< freenode k-lined my friend, many times. 
08:14:53 <oklosol> ehird: ais523: I've ran clonebots in #esoteric-blah for an okoplay. | ehird: i had another variation | ehird: with like 30 <<< dear fuck i wanna see 
08:33:19 <oklosol> AnMaster: you've never heard about sex in the city? god i envy your style 
08:37:30 <oklosol> oerjan: oklosol: feeling particularly bright today? <<< actually, yes. well. not the day you asked, but now. 
08:39:37 <oklosol> AnMaster: s/the/then/? <<< no, parses as "oerjan: the (nothing is possible unless there is a rule allowing it) kind, i assume" 
08:42:04 <oklosol> 01:46… ehird: AnMaster: The centralized UK provider that handles the block blocked this page recently: http://en.wikipedia.org/wiki/Virgin_Killer [you might not want to click] <<< i still think blocking a page containing child porn as an album cover is not as bad as blocking a thousand pages of normal porn 
08:42:19 <oklosol> (we looked through the whole finnish list, 5 pages of cp, rest was just porn.) 
08:42:39 <oklosol> (also the 5 needed a few links forward, nothing was cp to begin with) 
08:52:06 <oklosol> AnMaster: GreaseMonkey, so what about the actual melody? <<< 02307..7..5.....b02b5..5..3..20.02303..5..2..0b...b.5...3....... repeat iirc 
08:53:35 <oklosol> kerlo: Ebm(add9)? It doesn't even *have* an Eb, does it? <<< it has all but it. 
08:54:03 <oklosol> ebadd9 just drops gb a third down 
08:54:14 <oklosol> also why am i commenting this part, you're obviously noobs :-) 
08:54:41 <oklosol> nice. could do that without anyone commenting back 
08:55:02 <oklosol> and took only an hour, should really get back to only taking a glance at the logs. 
09:02:13 -!- oklosol has changed nick to oklopol. 
09:04:02 -!- kar8nga has joined. 
09:29:11 -!- tyrelle has joined. 
09:35:53 <oklopol> psygnisfive: sorry i missed you 
09:36:02 <oklopol> that i missed your comment, didn't see it 
09:40:08 <psygnisfive> and i know you missed me darling dont worry 
09:41:25 <oklopol> you were going to sleep when i was 
09:41:32 <oklopol> and you're going to sleep again. 
09:41:51 <oklopol> tyrelle: i've had two courses! 
09:47:44 -!- Corun has joined. 
09:51:40 <tyrelle> #lisp has some opinionated ops 
10:11:27 -!- GreaseMonkey has quit ("You only need one wheel. Bikers are just greedy."). 
11:47:26 -!- Corun has quit ("This computer has gone to sleep"). 
12:26:40 -!- judotest has joined. 
12:32:57 -!- judotest has changed nick to Judofyr. 
12:33:30 <Judofyr> that's why the smilie didn't show up in MSN :P 
12:46:29 -!- Corun has joined. 
12:48:42 -!- kar8nga has quit (Read error: 110 (Connection timed out)). 
12:49:04 -!- kar8nga has joined. 
12:51:11 -!- jix has joined. 
12:53:18 -!- jix has quit (Client Quit). 
13:30:31 -!- moozilla has joined. 
13:32:42 -!- metazilla has joined. 
13:32:48 -!- moozilla has quit (Read error: 104 (Connection reset by peer)). 
13:32:52 -!- metazilla has changed nick to moozilla. 
13:45:20 -!- Judofyr has quit (Read error: 104 (Connection reset by peer)). 
13:45:37 -!- Judofyr has joined. 
13:55:04 -!- metazilla has joined. 
13:55:04 -!- moozilla has quit (Read error: 54 (Connection reset by peer)). 
13:55:14 -!- metazilla has changed nick to moozilla. 
13:55:52 -!- jix has joined. 
13:57:42 -!- moozilla has quit (Read error: 104 (Connection reset by peer)). 
13:57:45 -!- metazilla has joined. 
14:06:23 -!- Judofyr_ has joined. 
14:10:18 -!- metazilla has quit (Read error: 104 (Connection reset by peer)). 
14:10:23 -!- moozilla has joined. 
14:12:57 -!- metazilla has joined. 
14:12:57 -!- moozilla has quit (Read error: 104 (Connection reset by peer)). 
14:13:05 -!- metazilla has changed nick to moozilla. 
14:22:04 -!- ais523 has joined. 
14:24:35 -!- Judofyr has quit (Read error: 110 (Connection timed out)). 
14:24:36 * ais523 wonders how the trolling went yesterday 
14:24:36 <ais523> hmm... I wonder if that's interesting enough to actually open up logs to read 
14:27:44 -!- metazilla has joined. 
14:27:44 -!- moozilla has quit (Read error: 104 (Connection reset by peer)). 
14:27:54 -!- metazilla has changed nick to moozilla. 
14:29:29 <ais523> <fizzie> Trolling esoteric language enthusiasts about their tastes in programming languages is like trying to annoy a duck by pouring water on it 
14:30:20 -!- moozilla has quit (Read error: 104 (Connection reset by peer)). 
14:30:23 -!- moozilla has joined. 
14:38:08 <ais523> I should read the logs more often 
14:47:50 -!- moozilla has quit (Read error: 54 (Connection reset by peer)). 
14:47:50 -!- moozilla has joined. 
14:47:57 -!- Judofyr_ has changed nick to Judofyr. 
14:50:40 -!- moozilla has quit (Read error: 104 (Connection reset by peer)). 
15:22:06 <ais523> ehird will like this quote: "MySQL is a very fast database because it takes out the parts of a database that make it a database." 
15:22:19 <ais523> which explains why lots of people don't like it, and also why lots of people use it 
15:42:19 -!- ehird has left (?). 
15:42:24 -!- ehird has joined. 
15:42:26 -!- ehird has left (?). 
15:42:29 -!- ehird has joined. 
15:43:16 <ehird> graph serialization for the fecking win 
15:43:26 <ehird> graph serialization for the fecking win 
15:44:11 <ehird> 00:14:53 <oklosol> ehird: ais523: I've ran clonebots in #esoteric-blah for an okoplay. | ehird: i had another variation | ehird: with like 30 <<< dear fuck i wanna see 
15:44:13 <ehird> im sure i showed you 
15:45:23 <ehird> also, our troll was awesomely bad. 
15:57:26 <oklopol> and yes, you probably showed me, i just don't remembe 
15:57:27 <ais523> yes, I read the logs too 
15:57:57 <oklopol> ehird: well i thought you were telling about the troll from last night 
15:58:37 <ehird> was replying to ais523's logmsg 
15:59:06 <ais523> what do you think of the quote about MySQL/ 
16:00:10 <ehird> 15:42 <ehird> graph serialization for the fecking win 
16:00:43 <ais523> actually, viewing MySQL as not a database, but still useful for certain tasks, is probably best 
16:00:50 <oklopol> ehird: yes, i know, you told that with your wat. 
16:00:52 <ais523> even if it isn't a database, it seems to have found itself a niche 
16:01:17 <ehird> oklopol: just about everything 
16:01:22 <ehird> until recently, it had no transactions 
16:01:44 <ais523> oklopol: it's sort of the C of databases, it lets you do stupid and nonsensical things without complaining, and most high-level features have to be written by hand 
16:01:47 <oklopol> transactions are one of the crucial things about irl databases that are not a part of databases as such 
16:01:58 <ehird> oklopol: er yes they are 
16:02:05 <ais523> of course, this means it's very fast 
16:02:17 <ehird> i don't actually think mysql did any of ACID until recently 
16:02:42 <ehird> they started a project recently, Drizzle, which aims to.. make it even less of a database, for the "web 2.0" crowd 
16:02:45 <ehird> i'm wondering what it'll have left 
16:03:01 <oklopol> ehird: they aren't an inherent part of databases. 
16:03:17 <ais523> cool, what does it do? 
16:03:17 <ais523> I actually think they're onto something here 
16:03:17 <ehird> printf("hello world\n")? 
16:03:19 <ehird> ais523: barely anything 
16:03:31 <ehird> http://en.wikipedia.org/wiki/Drizzle_(database_server) 
16:03:31 <ais523> hmm... this morning I was thinking about an esolang idea I haven't thought about in ages, and realised I hadn't told you lot about it 
16:03:41 <ehird> i bet it ends up as PERSISTENT MEMCACHED 
16:03:50 <ais523> basically, it's an attempt to create a programming language which is as computationally powerful as possible without being TC 
16:04:02 <ais523> the highest "named" class in common use seems to be linear bounded automaton 
16:04:09 <ais523> so I thought I'd make an Ackermann-function-bounded automaton 
16:04:19 <ehird> i've always thought that most real world programming need not use a turing complete language 
16:04:31 <ehird> and that the static-verification gains you could get from using a sub-TC language 
16:04:34 <ehird> would be highly useful 
16:04:44 <ais523> Slereah: they do, just the interps are buggy 
16:04:44 <ehird> Slereah: they use TC languages 
16:04:46 <ehird> just not on TC machines 
16:04:50 <Slereah> Yes, but they don't need to 
16:05:00 <Slereah> Because the languages can't be use to their fullest 
16:05:07 <ehird> Slereah: ok, lower than "TC bar memory storage" 
16:05:08 <ais523> incidentally, I was also wondering about whether it was possible to actually get a true-TC interp in the real universe 
16:05:17 <ais523> I think you need the universe to not expand 
16:05:23 <oklopol> ehird: i mean, i do agree transactions are a crucial part of a real database system, because you need it, in practise; i'm just you could just have the database not have any errors or synchronization problems, and get by without transactions. 
16:05:27 <ais523> but apart from that there are no obvious obstacles 
16:05:27 <ehird> you need it to expand to grow the tape 
16:05:38 <ais523> ehird: having it infinitely large to begin with 
16:05:45 <ais523> and free-energy, I meant 
16:05:47 <ehird> ais523: that's Impossible, though 
16:05:50 <ais523> which is sort of the opposite of entropy 
16:05:58 <ais523> ehird: the universe is only finitely large because it's expanding 
16:06:00 <Slereah> Entropy isn't really a law 
16:06:05 <ais523> the expansion of the universe causes it to get smaller 
16:06:15 <Slereah> But you're screwed anyway on infinite time 
16:06:18 <ais523> which is counterintuitive, but so is most of physics 
16:06:23 <ehird> i'm physics-retarded, I htink 
16:06:31 <Slereah> ais523 : What are you talking about 
16:06:32 <Judofyr> ehird: limechat is awesome! thanks for the tip :-) 
16:06:36 <ais523> basically, the expansion is homogenous, so the speed at which a particular point is receding depends on its distance from you 
16:06:43 <ais523> the further away it is, the faster it recedes 
16:07:00 <ais523> if a point is so far away it's moving away faster than the speed of light, it's technically outside the universe 
16:07:03 <Slereah> That makes it bigger, not smaller :o 
16:07:05 <ais523> that's how the boundary of the universe is defined 
16:07:06 <ehird> i still can't think how a universe expanding gets smaller. 
16:07:09 <ehird> that makes no sense. 
16:07:22 <Slereah> I think you mean "visible universe" 
16:07:29 <Slereah> Which is irrelevant to the discussion 
16:07:37 <Slereah> Also the visible universe gets larger also 
16:07:49 <ais523> clearly you can't use data outside the visible universe for calculation 
16:07:56 <oklopol> i'm with ais523 on this one 
16:08:20 <ais523> Slereah: well, technically, but everything else expands at the same rate too, so it gets smaller compared to all the objects inside it 
16:08:21 <Slereah> If you use a TC machine, it will need to move to read the data anyway 
16:08:35 <ais523> Slereah: its horizon always moves inwards 
16:08:38 <Slereah> It doesn't get smaller, it gets emptier. 
16:08:47 <ais523> you can't move the horizon outwards except by moving faster than the speed of light, or using time travel 
16:08:52 <ais523> and both are believed impossible 
16:09:03 <ais523> (not to mention time travel gives you computational classes above TC) 
16:09:04 <Slereah> What are you talking about. 
16:09:14 <Slereah> Just moving will move your horizon 
16:09:29 <ais523> Slereah: yes, but the horizon moves inwards at the speed of light 
16:09:33 <ais523> so we're just lucky it's so far away 
16:09:41 <ais523> the horizon's getting smaller, all the time 
16:09:48 <ais523> at least, if the universe keeps expanding 
16:10:09 <ais523> Slereah: less distance to it 
16:10:19 <Slereah> I'm afraid I must disagree then 
16:10:19 <ais523> and so a smaller surface area, because it's spherical 
16:10:35 <ais523> you may be thinking of it getting /older/ over time 
16:10:36 <ehird> "Programming language authors image gallery" <-- I thought this was a sentient language that authored a web gallery script... 
16:10:57 <Slereah> The horizon increases in size just with time. 
16:11:16 <Slereah> I'm not sure if it also increases with expansion, but it also might 
16:11:31 <ais523> does anyone want to write up a well-worded and thought-provoking seed to a Usenet flamewar, on this? 
16:11:34 <ais523> so we can see who's right? 
16:11:35 <Slereah> (Doing the speed of light + enlarged metric isn't easy to do in your head) 
16:12:01 <oklopol> Slereah: well technically not, say the universe consisted of cells of some size that was constantly getting bigger 
16:12:08 <oklopol> and it grew faster than light would let us see 
16:12:21 <ais523> ehird: as for Drizzle, they're taking out all the features that you don't technically have to use in a MySQL database AFAICT 
16:12:27 <ais523> they seem to be making some form of tarpit 
16:12:34 <ehird> i still love this http://www.malevole.com/mv/misc/killerquiz/ 
16:12:34 <oklopol> so once in a while, even though we're seeing farther and farther, the cell size would let us see less and less cells 
16:12:39 <ais523> e.g. you don't actually need prepared statements, you can just send the statement each time 
16:12:57 <Slereah> oklopol : Except the universe doesn't do that. 
16:12:58 <oklopol> i mean i don't know or care whether this is what actually happens, i'm just saying that's what i though ais523 meant. 
16:13:03 <Slereah> You see more cells, not bigger cells. 
16:13:06 <ais523> yes, that is what I meant 
16:13:22 <ais523> and no, expansion of the universe doesn't create more cells, at least not in the popular theories 
16:13:26 <oklopol> Slereah: explain to ais523, not me. 
16:13:28 <ais523> I think steady-state theory has it doing that 
16:13:43 <Slereah> What does "more cells" mean anyway. 
16:13:53 <Slereah> It's continuous in general relativity 
16:13:57 <ais523> well, the cells are just a way of thinking about it, given they're infinitely small 
16:14:02 <ais523> do you know about the delta function? 
16:14:09 <oklopol> Slereah: planck's constant or something like that getting bigger? 
16:14:24 <ais523> well, how do you know it integrates to 1, given that it's 0 everywhere and infinity at one point 
16:14:27 <Slereah> oklopol : Not proved in any way 
16:14:34 <oklopol> AnMaster: much colder here. 
16:14:34 <AnMaster> <oklosol> AnMaster: you've never heard about sex in the city? god i envy your style <-- my style? 
16:14:43 <ais523> the cell-size thing is sort of like that 
16:14:48 <ais523> there are no actual cells, and they're infinitely small 
16:14:51 <ais523> yet they're getting bigger 
16:15:11 <oklopol> Slereah: don't respond to that "i'm sure", it was an accidental message :) 
16:15:13 <ehird> you know who we need in here? 
16:15:23 <ais523> why, does he know about this sort of thing? 
16:15:32 <ais523> or just because it would be great to have such a prominent esolanger? 
16:15:42 <AnMaster> <oklosol> AnMaster: GreaseMonkey, so what about the actual melody? <<< 02307..7..5.....b02b5..5..3..20.02303..5..2..0b...b.5...3....... repeat iirc <-- what on earth is that notation? 
16:15:51 <oklopol> AnMaster: being completely ignorant about popular culture 
16:15:54 <ehird> i mean, he made befunge 
16:15:57 <ehird> what more do you want? 
16:16:15 <ehird> but he made befunge :P 
16:16:22 <AnMaster> oklopol, sure, I don't care about popular culture 
16:16:22 <ehird> actually, I think AnMaster would scare him away 
16:16:25 <ais523> and lots of others, too 
16:16:30 <AnMaster> I don't even HAVE a tv since a few months 
16:16:42 <ehird> AnMaster: http://www.theonion.com/content/node/28694 
16:16:43 <oklopol> what i use for melodies, a subset that explains that little melody, "z-a0-9A-Z" are notes, from left to right, "."'s are pauses 
16:16:47 <ais523> AnMaster: wow, you sound just like me 
16:16:55 <AnMaster> if I want to watch the news of the public service TV I can just go to their website 
16:17:03 <oklopol> AnMaster: i haven't watched tv in years 
16:17:03 <AnMaster> I think UK users can do the same for BBC 
16:17:15 <ais523> oklopol: I'd guessed hexadecimal with . to continue notes 
16:17:19 <oklopol> and i don't care about *physics*, let alone pop culture 
16:17:27 -!- oerjan has joined. 
16:17:36 <oklopol> and still i know what sitc is 
16:17:39 <ais523> <oklopol> and i don't care about *physics*, let alone pop culture 
16:17:40 <AnMaster> <oklopol> what i use for melodies, a subset that explains that little melody, "z-a0-9A-Z" are notes, from left to right, "."'s are pauses <-- left to right of what? 
16:17:43 <oerjan> <oklosol> and took only an hour, should really get back to only taking a glance at the logs. 
16:17:48 <oerjan> that may be for the best. 
16:17:57 <ais523> oklopol: that has to be one of my favourite lines of yours ever 
16:18:00 <ais523> it sums you up so well 
16:18:10 <oklopol> but that's the main melody 
16:18:15 <oklopol> who cares what the instrument is 
16:18:33 <ehird> i don't believe in existence 
16:18:44 <oklopol> caring about instruments is for people who don't understand music, you know, the kind of people who like music that "sounds good" 
16:18:52 -!- Epic_Fail_Guy has joined. 
16:18:53 <Epic_Fail_Guy> ais523 : It's not, it's just defined like that, not by infinity. 
16:19:15 <oklopol> ais523: heh, thanks, i liked that line too 
16:19:19 <oerjan> ehird: don't put descartes before the horse 
16:19:20 <AnMaster> oklopol, well 1) I can't sing, but I can play the piano a bit 2) If I could sing I would be really low bass I think 
16:19:28 <ais523> Epic_Fail_Guy: if you're talking about the delta function like that, you're missing its essential esoness 
16:19:49 <ehird> AnMaster should have a Standard Context pack of lines which he just links to so he doesn't have to say the same things 
16:19:51 <ehird> every five seconds 
16:19:54 <ais523> did you have that pun prepared? 
16:20:22 <oklopol> AnMaster: i know all that, like ehird pointed out. my point is, just use any instrument 
16:20:27 <oklopol> it's the same melody no matter what you use 
16:20:37 <ehird> * AnMaster has a really low voice <-- one of your standard lines 
16:20:46 <ehird> along with "i recommend emacs" 
16:20:46 <ais523> oklopol: in some cases the instruments can affect the harmony 
16:20:56 <oklopol> if it's correct, i just woke up and didn't really try playing it in my head to check it or anything. 
16:20:59 <ais523> such as an organ with a 3/7 stop, or one of the other silly ones 
16:21:21 <oerjan> ais523: no, but it was recycled of course 
16:21:28 <oklopol> ais523: umm. what do you mean? 
16:21:37 <AnMaster> ehird, I said it just once the last 3 months, and that was the instance I said just now 
16:21:38 <ais523> oklopol: gggggggggggggggggggggggg 
16:22:05 <ais523> wait, sorry, cleaning my keyboard 
16:22:05 <ais523> oklopol: I meant, organs have 'stops' which let you automatically add harmony 
16:22:05 <oklopol> it's alright if organs have a 3/7 stop, unless of course it's the heart 
16:22:12 <ais523> a 3/7 stop will add a note whose frequency is 3/7 higher than the one you play 
16:22:30 <ais523> it's one of the silly ones, most of the stops are at frequencies which actually correspond to chords 
16:23:11 <oklopol> ais523: right. i didn't know it does that 
16:23:20 -!- jix has quit ("..."). 
16:23:27 <ais523> gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg 
16:23:31 <ais523> ugh, my g key is still dirty 
16:23:36 <ais523> anyone here know how to clean keyboards? 
16:23:45 -!- jix has joined. 
16:23:51 <oerjan> ais523: i thought you were grinning widely 
16:23:58 <ehird> ais523: use water :P 
16:24:10 <oklopol> anyway, something played with an instrument will always just be an approximation of the pure sine/square wave melody 
16:24:12 <ais523> not in a position to do that easily right now 
16:24:16 <ais523> although I may try when I get home 
16:24:30 <oklopol> if you have a 3/7 stop there, it will be closer to being an approximation of having that higher note there. 
16:24:31 <ais523> although square waves aren't exactly pure 
16:24:34 -!- Slereah2 has joined. 
16:24:34 <ehird> ais523: take the key out and figure something out 
16:24:54 <ais523> ehird: I've never tried to remove a keycap from this laptop, I have no idea how securely or not they're glued on 
16:24:59 <ais523> and I don't want to break it 
16:25:08 <ais523> I know they just come off on desktops, not sure about laptops though 
16:25:16 <ehird> ais523: well, it'll almost certainly come off OK 
16:25:18 <ehird> but it might be a bit tricky 
16:25:27 <ais523> oklopol: actually, organs are pretty similar to additive synthesizers 
16:25:33 <ais523> ofc they don't manage perfect sine waves to add together 
16:25:44 <ais523> but you get to add together a lot of organ-waves to create the timbre you want 
16:25:44 <oerjan> my organs synthesize things, then add them 
16:27:17 <oerjan> organ waves are all in the blood 
16:27:19 <oklopol> ais523: i don't like timbres. i'm more of a theoretical musician, so i prefer keeping it all pure and ...sinous? yes, that must be it. 
16:27:35 <ehird> who wants to  help me write a Magenta compiler? 
16:27:36 <ehird> yes, I know about the curse :-P 
16:27:57 <ais523> oklopol: sinusoidal is the real word, but I prefer yours 
16:28:06 <oerjan> i am already cursed.  i wouldn't want to add to it. 
16:28:07 <ais523> and no, I don't want to help 
16:28:26 <ais523> mostly because if you succeed, you'll break the curse, then Magenta won't be so interesting to talk about 
16:28:39 <ais523> in a way, I'd prefer you to fail so we can all have a laugh about it and talk about how Magenta is truly cursed 
16:28:49 <ais523> but if I want you to fail, then I shouldn't really work on the project, that wouldn't work out well 
16:28:51 <oklopol> sine -> sinusoidal? does sine come from a longer word i don't know or whazz thaddabout? 
16:29:09 <ais523> English makes no sense, but it might be fun to look up 
16:29:30 <oerjan> oklopol: sine <- sinus, latin 
16:29:38 <ehird> ais523: i think it's interesting :P 
16:29:46 <oerjan> adding -oid to that is probably not very classical 
16:29:50 <oklopol> oerjan: and what's this oidal subbic?= 
16:29:52 <ais523> hmm... Wiktionary doesn't know, but apparently "sinusoidal" is "sinimuotoinen" in Finnish 
16:29:58 <ais523> and that's the only translation given 
16:30:19 <oklopol> sinimuotoinen = of sinusoidal form 
16:30:26 <ais523> hmm... an ellipsoid is a 3D shape which corresponds to what an ellipse is in 2D 
16:31:04 <oerjan> -oid is a greek suffix i think, put on things to make family names in biology.  like hominoid 
16:31:11 <oklopol> well. "of sine form", we don't want recursive translations 
16:31:25 <AnMaster> ais523, hm what is a 3/7 stop on an organ? I have no clue how organs work apart from blowing air through pipes 
16:31:25 <oerjan> oh it may be -o + ides 
16:31:36 <oerjan> the latter meaning offspring 
16:32:05 <oklopol> ais523: well yes, i know what oid *means*, i just meant what's it doing there 
16:32:07 <ais523> AnMaster: organs are so complicated because they have one pipe for each stop/note combination, more or less 
16:32:19 <oklopol> hmm. i didn't really ask it that way. 
16:32:21 <AnMaster> ais523, I thought it was one pipe / note? 
16:32:23 -!- Slereah has quit (Connection timed out). 
16:32:24 <ais523> and all the stops basically multiply or divide the frequency of a note by a given value 
16:32:37 <ais523> stops you can either turn on or off, they're like booleans 
16:32:48 <ais523> and when you play a note, you get the sound of that note for each stop that's on 
16:32:55 <oklopol> AnMaster: stops flow of air, presumably 
16:33:01 <ais523> normally organs have multiple keyboards, and stops can be on or off for individual keywords 
16:33:02 <AnMaster> hm reminds me of the university organ in Discworld, with "silly fam animal sounds" 
16:33:13 <oerjan> http://en.wikipedia.org/wiki/-oid 
16:33:14 <ais523> and I think that's the etymology 
16:33:40 <ais523> it goes all the way from 1/16 stops which are so low that you can't actually hear them, just annoy the Headmaster because for some reason the pipes come out directly behind his chair 
16:33:44 <oklopol> err. oerjan: what does sinus mean? 
16:33:48 <ais523> to stops with numbers like 4 
16:33:53 <oklopol> i mean i thought it meant what "oid" meant 
16:33:54 <oerjan> AnMaster: s/fam/farm/ ? 
16:33:54 <AnMaster> ais523, hm I see, I thought the multi-keyboard thing was due to having such a large range 
16:34:03 <oklopol> which is why i didn't understand why the suffix 
16:34:22 <oerjan> oklopol: "bukt" although it is a mistranslation from arabic iirc 
16:34:28 <ais523> oklopol: sinuses are the parts of the human body which connect the nose to the back of the mouth, IIRC 
16:34:32 <ais523> or possibly to the ears 
16:34:38 * oerjan doesn't remember the english word 
16:34:42 <ais523> but I think that's irrelevant, at least I hope it is 
16:35:10 <AnMaster> ais523, you could hear 1/16 for the notes at the upper end of the range 
16:35:13 <oklopol> lol i thought -oid meant like "ball" :D 
16:35:32 <oklopol> i've probably reverse-engineered it from ellipsoid 
16:35:59 <oklopol> also explains monoids and the like 
16:36:05 <ehird> i've always wanted a language that can jump through the calls tack 
16:36:06 <ais523> so "like a sine", in this case 
16:36:16 <AnMaster> ais523, also do you know what the similarity is between organs and MRI scanners? 
16:36:25 <ais523> AnMaster: is this an attempt to make a pun? 
16:36:31 <ais523> if so, I utterly fail to get it 
16:36:37 <oklopol> also "asteroid" could have a ball etymology 
16:36:43 <oerjan> oklopol: oh, "bay" in english 
16:36:58 <oklopol> oerjan: bay? you mean sinus? 
16:37:16 <ais523> according to Wiktionary, the Latin word "sinus" has loads of meanings 
16:37:19 <ais523> all of which seem to be irrelevant 
16:37:19 <oerjan> yes. but the use for trigonometric sines is a mistranslation from arabic 
16:37:34 <ais523> ok, that would explain a lot 
16:37:34 <oerjan> ais523: the "See also: sine" at the bottom 
16:37:44 <ehird> guess what b(3) returns 
16:37:48 <oklopol> also i've known what sinuses are like forever 
16:38:01 <AnMaster> ais523, what is the thing about bays and sin() that you are discussing 
16:38:05 <ehird> in a, "x" is now a reference to the first local var 
16:38:07 <AnMaster> I'm unable to figure out what the topic is 
16:38:13 <ais523> ehird: ick_ec can do that 
16:38:13 <ehird> and b has a var in the same position 
16:38:16 <ehird> so it ends up accessing that 
16:38:36 <ehird> basically, i'm trying to make a language where you can goto/comefrom ----anywhere----- 
16:38:47 <ehird> even in <condition> in while (<condition>) 
16:38:52 <ais523> oklopol: don't worry, people on IRC are there to help when you're too lazy to do your own remembering 
16:38:57 <ais523> I know it helps me when I'm in that state 
16:39:11 <ais523> ehird: well, famously asm works like that 
16:39:22 <oklopol> well i just had 6 hours of band training 
16:39:28 -!- Epic_Fail_Guy has quit (Read error: 110 (Connection timed out)). 
16:39:41 <ais523> oklopol: I'm not criticising you, it happens to everyone 
16:39:42 <oklopol> well of course asm works like that 
16:39:45 <ais523> just most people don't admit it 
16:40:08 <oklopol> well yes, but i'm very insecure about my intelligence. 
16:40:44 <ais523> <Slashdot> But how many of us actually run an operating system that Richard Stallman would consider free? 
16:40:53 <ehird>     while (A: (x -= 1) > 0) { 
16:40:54 <ehird>         printf("hello world\n"); 
16:40:58 <ais523> oh dear, someone mod the article flamebait again 
16:41:06 <ehird>     printf("x = %i\n", x); 
16:41:18 <ehird> and yes, that -actually works- 
16:41:28 <ais523> ehird: would the comefrom only happen if you called B, not A directly? 
16:41:38 <ais523> also, what's the precedence of label vs. > 
16:41:38 <ehird> ais523: i think so, yes 
16:41:40 <AnMaster> ais523, how many gNewSense users are there? 
16:41:46 <ehird> also, label is high precedence 
16:41:47 <AnMaster> and how many Hurd users are there? 
16:41:53 <ais523> AnMaster: I don't know, but I'd guess less than use Ubuntu 
16:42:00 <oklopol> haha, "dynamic comefrom scope" 
16:42:10 <AnMaster> ais523, well that is the answer to <ais523> <Slashdot> But how many of us actually run an operating system that Richard Stallman would consider free? 
16:42:16 <oerjan> AnMaster: latin "sinus" means "bay" 
16:42:29 <ehird> i like how you have to do the goto B; thing so that you never land on it directly 
16:42:30 <ais523> AnMaster: I was commenting more on the fact that Slashdot are trying to inspire debate about a contentious topic, than the actual question 
16:42:38 <oklopol> ehird: please use that term in the spec like it's a standard term, not explaining further. 
16:42:39 <ehird> I should have no return 
16:42:44 <ais523> ehird: what happens if you hit a comefrom directly? Nothing, like in INTERCAL? 
16:42:48 <ehird> just a way to get a reference to the label of the caller 
16:42:55 <oerjan> also, "pocket", "curve", or "bosom", says wp 
16:42:56 <ehird> and a way to assign to the right variable in the caller 
16:43:00 <ais523> also, gerund comefroms plz 
16:43:11 <AnMaster> <ehird> i like how you have to do the goto B; thing so that you never land on it directly 
16:43:19 <ehird> ais523: hitting {comefrom A;} directly goes to A 
16:43:25 <ehird> so that the rest runs, but you do _come from_ A 
16:43:44 <ais523> ehird: no, that's what I meant by gerund comefroms 
16:43:54 <ehird> ais523: i dont' get it 
16:43:57 <ais523> gerund nextfrom would be more useful, actually 
16:44:08 <ais523> nextfrom +; number_of_additions++; resume 1; 
16:44:13 <AnMaster> I know ick has computed come from 
16:44:18 <ehird> AnMaster: just put your comefrom in an if () 
16:44:25 <ais523> ehird: that doesn't work 
16:44:28 <AnMaster> ehird, really? that will work? 
16:44:33 <ais523> because you want to be able to jump into the body of ifs, don't you? 
16:44:36 <ehird> (warning: this is perverse...) 
16:44:47 <ais523> oh, comefroms only become active inside the block they're in 
16:44:55 <ais523> ugh, that's worse than INTERCAL 
16:45:04 <ais523> although arguably leads to more maintainable code 
16:45:12 <ais523> AnMaster: yes, but comefroms are dynamically scoped 
16:45:16 <ais523> so they're not active all the time 
16:45:27 <oklopol> ais523: well you can probably comefrom into inside a block, if the label is inside the block from where the coming occurs 
16:45:36 <ais523> sort of if you write {int a;} {a=1;} in C, you get an error 
16:45:47 <ehird> ais523: nah, you will be able to jump into them manually 
16:45:49 <oklopol> i mean { ... conditional comefrom A: ... } ... A: ... 
16:45:50 <ehird> it just won't happen automatically 
16:46:07 <ehird> isn't this _awful_? :D 
16:46:11 <ais523> ehird: nextfrom too, plz 
16:46:16 <ehird> dijkstra is cutting himself in his grave 
16:46:19 <ais523> it's just as useful in practice 
16:46:22 <AnMaster> ais523, what is nextfrom in ick now again? 
16:46:28 <ais523> AnMaster: like comefrom, but saves return address 
16:46:38 <ehird> ais523: oh so comefrom with a stack? 
16:46:40 <ais523> CLC-INTERCAL had it first 
16:46:52 <ehird> ais523: all of my gotos/comefroms/function calls have a "stack" 
16:47:00 <ehird> in that they can get a reference to the right place to goto 
16:47:00 <oklopol> ais523: i think it's already with a stack, although locals overwrite the top of it 
16:47:03 <ehird> from whence you came 
16:47:09 <AnMaster> *stack++ = &this_function_name_goes_here; goto ... 
16:47:10 <ehird> thats how you return a value 
16:47:34 <ehird> looks something like this: 
16:47:41 <AnMaster> well different syntax than that I gues 
16:47:47 <ehird> a(x) { x = x + 5; goto ->; } 
16:48:01 <ais523> so how do you undo the previous comefrom? 
16:48:01 <ais523> in intercal, it would be RESUME #4 to undo the last 4 nextfroms, for instance 
16:48:01 <ehird> a(1) evaluates to 6 
16:48:05 <ais523> oh and yes the #4 can be computed 
16:48:15 <ais523> ehird: uh-oh, that's exactly how gcc-bf actually implements function calls 
16:48:35 <ehird> I call goto ->; the "finnish maneuver" 
16:48:46 <ehird> because you do it when you "finnish" your function! 
16:48:48 <ais523> AnMaster: what, how would you do it? 
16:48:52 <ehird> somebody call the pun police 
16:49:12 <ais523> AnMaster: well, I had to implement function calls somehow 
16:49:13 <AnMaster> ais523, well I haven't considered that 
16:49:18 <AnMaster> I though you used a switch case 
16:49:32 <ais523> yes, that's how goto is implemented 
16:49:41 <ais523> what was above is how function calls are implemented in terms of goto 
16:49:45 <ais523> so there isn't a contradiction 
16:50:15 <AnMaster> ehird, yes but I didn't understand it 
16:50:19 <ehird> -> is a label reference to the exact point one up in the goto stack 
16:50:31 <ais523> ehird: does it pop the stack at the same time, or does the goto do that? 
16:50:31 <ehird> ->+1 is two levels up 
16:50:35 <ehird> ->+10 is ten levels up 
16:50:37 <ais523> actually, does the goto pop two levels when returning? 
16:50:38 <oklopol> ehird: will the local variable x, after goto ->;, overwrite whatever local was created last in the calling function? 
16:50:39 <ehird> yes, overloading addition on label references 
16:50:42 <ehird> it works on every label reference 
16:50:52 <ehird> and yes, that means you can do A-2 even if you haven't gone anywhere near A 
16:50:59 <ais523> ehird: heh, finds the label in the stack, then moves 2 away from it? 
16:51:00 <ehird> and get a reference to the point two levels up from A 
16:51:04 <AnMaster> ehird, why do you have functions at all? 
16:51:06 <ehird> ais523: something like that 
16:51:11 <ehird> AnMaster: well, good point 
16:51:15 <ehird> just do it all with labels 
16:51:26 <ais523> AnMaster: presumably the functions are to generate infinite data storage 
16:51:28 <ehird> they're nested, scoped labels. 
16:51:41 <ais523> well, you need infinite data somehow 
16:51:48 <ehird> nested scoped labels, hmmmmm 
16:51:51 <oklopol> { var a = 0; var b = 0; call smth } { smth: var x = 5; goto -> }, what will a and b be after that? 
16:51:58 <ais523> AnMaster: that's only one stack 
16:51:59 <ehird> oklopol: lemme look 
16:52:10 <AnMaster> ais523, you need to have local variables somewhere 
16:52:10 <ehird> oklopol: a will be 5 
16:52:17 <ehird> because it's on the same position in the local variable storage as a 
16:52:18 <ais523> and it should be common knowledge here what happens if you only have one stack, and no way to index arbitrarily deep into it so it isn't really a stack 
16:52:20 <AnMaster> ais523, also you could just add array variables 
16:52:25 <ais523> AnMaster: that's cheating 
16:52:34 <ehird> in fact, this thing really fucking confuses me 
16:52:38 <ehird> i don't get the semantics at all 
16:52:43 <ehird> I think it's a huge heap of special cases 
16:52:43 <ais523> besides, you can't have infinitely large arrays without bignum dimensions 
16:52:46 <oklopol> ehird: why a? i mean wouldn't b be on top of the stack 
16:52:53 <ais523> or bignum numbers of dimensions, I suppose 
16:53:05 <ehird> I think we strayed away from this a bit 
16:53:07 <ehird> when we got into -> 
16:53:12 <ais523> I can imagine a lang where all arrays were indexed 0 to 1, but could have bignum numbers of dimensions 
16:53:13 <ehird> let's rewind a bit to the while (A: ...) & comefrom example 
16:53:22 <oklopol> ehird: no, it's just starting to get interesting 
16:53:23 <ais523> and anyway, you're just reinventing INTERCAL with a different syntax 
16:53:30 <AnMaster> ehird, what is the name of the language? 
16:53:33 <ehird> ais523: i'm not now, i'm rewinding 
16:53:38 <ehird> oklopol: yes, but let's rewind to get a better picture 
16:53:41 <ehird> AnMaster: i don't know! 
16:54:05 <AnMaster> like goto and comefrom combined 
16:54:32 <AnMaster> { A: foo; } { B: bar; }  { C: A cometo B } 
16:54:54 <AnMaster> so that means it will act as if there had been a "comefrom A" at B 
16:55:07 <oklopol> 18:52… ais523: and it should be common knowledge here what happens if you only have one stack, and no way to index arbitrarily deep into it so it isn't really a stack <<< what do you mean not really a stack? 
16:55:08 <AnMaster> ehird, what do you think of that idea? 
16:55:08 <ais523> AnMaster: code injection? 
16:55:15 <oklopol> that's pretty much the definition of a stack 
16:55:30 <ais523> oklopol: if you can index arbitrarily deep without popping, it's basically an array which also has stacklike operations 
16:55:39 <oklopol> AnMaster: that doesn't really work, it doesn't scale, semantically, methinks 
16:55:44 <oklopol> will not have any uses, that is 
16:55:49 <ais523> ehird: AnMaster; I've been looking for a way to do that in INTERCAL for a while 
16:55:54 <ais523> it's possible to do it right now, but hacky 
16:56:09 <oklopol> AnMaster: what does it mean exactly to act as if it came from A? 
16:56:12 <ais523> just adding it as a new command didn't actually cross my mind for some reason 
16:56:30 <ehird>     while (A: (x -= 1) > 0) { 
16:56:32 <ehird>         printf("hello world\n"); 
16:56:34 <ais523> oklopol: it's effectively self-modifying code, just dynamically scoped 
16:56:39 <ais523> so it unmodifies itself when you leave the block 
16:56:44 <ehird>     printf("x = %i\n", x); 
16:56:44 <oklopol> ais523: oh, i guess i misread your negations then 
16:56:50 <ehird> let's go from thar 
16:56:52 <AnMaster> oklopol, like if C had comefrom A; goto B; but C will never end up on the stack 
16:56:54 <oklopol> thought you said it's not a stack if you can't access all indices 
16:57:08 <ehird> http://www.cobolportal.com/index.asp?bhcp=1 
16:57:19 <AnMaster> oklopol, also if something was comefrom C it wouldn't affect it 
16:57:36 <oklopol> yeah that's an awesome instruction 
16:57:47 <ehird> cometo should be an unary operation 
16:57:51 <oklopol> well i thought hitting that instruction would somehow flip A on top of stack, then call B 
16:58:01 <AnMaster> ehird, well it would be hard to do 
16:58:13 <oklopol> but yeah, it just says "if, while this block is on stack, you hit A, goto B" 
16:58:32 <ais523> I must get back to thinking about DO INEVITABLY 
16:58:40 <ais523> which was a primitive which let you implement that sort of thing and more 
16:58:48 <ais523> it basically meant "do this statement, but not quite yet" 
16:58:50 <ehird> comefrom A; goto B; 
16:58:56 <AnMaster> oklopol, no no, that would be: "C: camefrom A to B" 
16:58:58 <ais523> the statement ran, but delayed a couple of cycles 
16:59:02 <AnMaster> ehird, what do you think of that one then? 
16:59:03 <ehird> listen tomeeeeeeeeeee 
16:59:15 <ehird> comefrom A; goto B; 
16:59:21 <ais523> ehird: that was the hack I was planning to use 
16:59:26 <ehird> ais523: that's not a hack :P 
16:59:28 <ais523> it doesn't work, because it disrupts the callstack 
16:59:34 <ehird> ais523: ok, use nextfrom them 
16:59:34 <ais523> you end up with two entries rather than 1 
16:59:40 <AnMaster> ehird, 1) that will put the location of "goto B;" on the stack frame 
16:59:52 <ehird> well that's easy, just destackerize it or whatever 
16:59:52 <ais523> if you have separate comefrom/nextfrom, it works 
16:59:54 <AnMaster> ehird, 2) it will be affected by any comefrom at the location of comefrom A 
17:00:17 <ais523> except in INTERCAL it still doesn't work in all cases, it works for fixed labels A but not for gerunds 
17:00:23 <ais523> which is why you need hacks 
17:00:28 <AnMaster> ehird, 3) wouldn't this goto B when it was first executed? 
17:00:34 <AnMaster> since it is dynamically scoped 
17:00:34 <ehird> AnMaster: just goto out of it 
17:00:41 <ais523> hmm... you might be able to manage it for cometo by mixing nextfrom and forget, but not for nextto 
17:00:41 <ehird> { goto X; comefrom A; goto B; X: } 
17:00:51 <ehird> you don't create a new block of scope 
17:00:55 <ehird> so it still applies 
17:01:07 <oklopol> just have a way to write "stack functions", that don't work on the normal stack, and that can be called to alter it 
17:01:10 <ehird> isnce there's a comefrmo 
17:01:13 <ehird> it'd actually goto A 
17:01:14 <AnMaster> ehird, still the return issue is unsolved 
17:01:35 <AnMaster> { goto X; comefrom A; goto B; goto ->; X: } 
17:01:42 <ais523> oklopol: INTERCAL solves that problem by making all stack manipulation implicit 
17:01:44 <ehird> that's what I was  thinking AnMaster 
17:01:54 <ehird> you could just make it a function 
17:02:06 <AnMaster> ehird, still this wouldn't work for goto ->+2 
17:02:11 <ehird> cometo(A,B) { goto X; comefrom A; goto B; goto ->+1; X: } 
17:02:11 <oklopol> ais523: and i'm essentially saying maybe you could try making it explicit 
17:02:25 <AnMaster> ehird, err, what if B does goto ->+10 
17:02:33 <ehird> AnMaster: modify -> 
17:02:35 <oklopol> just have it be implicit for the functions that have an explicit view of the stack under them 
17:02:36 <AnMaster> since that code would be skipped 
17:02:43 <AnMaster> ehird, what if you can't modify B's code? 
17:02:46 <ehird> cometo(A,B) { goto X; comefrom A; -> = -> + 1; goto B; goto ->; X: } 
17:02:56 <ehird> AnMaster: MWAHAHAHAHAHA :D 
17:03:03 <ehird> cometo(A,B) { goto X; comefrom A; -> = -> - 1; goto B; goto ->; X: } 
17:03:11 <ehird> i think my brain just broke 
17:03:22 <ehird> AnMaster: well, -1 
17:03:28 <ehird> since the stack goes downwards 
17:03:31 -!- ais523 has quit (Remote closed the connection). 
17:03:33 <ehird> but seriously, what 
17:03:38 -!- ais523 has joined. 
17:03:41 <ehird> cometo(A,B) { goto X; comefrom A; -> = -> - 1; goto B; goto ->; X: } 
17:03:44 <ehird> THAT JSUT DOES NOT MAKE SENSE 
17:03:47 <ais523> <ais523> and even that doesn't solve the problem, because what if the code at B wants to return more than one level at once? It'll have to add 1 to the distance to return, for no reason obvious to it 
17:03:52 <ehird> cometo(A,B) { goto X; comefrom A; -> = -> - 1; goto B; goto ->; X: } 
17:03:56 <AnMaster> ehird, I think the goto -> will never be executed 
17:04:03 <ehird> AnMaster: oh, right 
17:04:05 <ais523> you've just added yet another INTERCAL operator 
17:04:06 <ehird> cometo(A,B) { goto X; comefrom A; -> = -> - 1; goto B; X: } 
17:04:09 <ais523> that's "FORGET #1" in INTERCAL 
17:04:12 <ehird> I'm generalizing the whole control flow thing 
17:04:22 <ehird> also, intercal isn't quite as hectic as this 
17:04:26 <ais523> I still think you're reinventing INTERCAL, though 
17:04:27 <ehird> this is completely freeform 
17:04:43 <AnMaster> ehird, what about return values? 
17:04:49 <ehird> INTERCAL has no label refs apart from constant ones and -> 
17:04:50 <ais523> and it's completely freefrom in INTERCAL too, if only because it's sufficiently low-level that "inside expressions" in your lang = "between statements" in INTERCAL 
17:04:56 <ehird> as my cometo shows, they can be passed around 
17:04:57 <AnMaster> ehird, you could use a global variable for it 
17:05:10 <ais523> and you can do computed gotos too 
17:05:16 <ehird> you make it so that the func you returns to 
17:05:16 <ais523> it takes a few statements 
17:05:20 <ehird> on the top of the stack 
17:05:30 <ehird> givemeatwo() { a = 2; goto -> } 
17:05:32 <ais523> ehird: well, yes, that's the normal way to do call/return in INTERCAL 
17:05:33 * oerjan belatedly puts ehird in handcuffs for punning without a license 
17:05:37 <ehird> since a resides on the top of the stack 
17:05:42 <ehird> givemeatwo() evaluates to 2 
17:05:46 <ehird> because when you go back, it's still on the top of the stack 
17:05:49 <ehird> :DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 
17:05:52 * oerjan then gives up reading the channel again 
17:05:57 <ais523> only difference is that scoping is explicit 
17:05:57 -!- ais523 has quit (Remote closed the connection). 
17:06:03 <AnMaster> the goto -> will have popped it 
17:06:10 <ehird> not using a stack there 
17:06:11 <AnMaster> or is the call stack separate? 
17:06:14 <ehird> the value stack stays the same 
17:06:16 <oklopol> oerjan: the beginning was actually pretty interesting 
17:06:18 -!- ais523 has joined. 
17:06:25 <ais523> [17:05] <ais523> ehird: well, yes, that's the normal way to do call/return in INTERCAL 
17:06:27 <ais523> [17:05] <ais523> only difference is that scoping is explicit 
17:06:36 <AnMaster> ehird, ouch that means you will have to remember to pop the stack of any local variables before returning 
17:06:40 <oklopol> of course, i now believe ais523 in that all this is already intercal 101 
17:06:46 <ais523> my connection must have dropped for recieve but not send, for some reason 
17:06:53 <ehird> AnMaster: um, let me think 
17:07:01 <ehird> just don't do that 
17:07:03 <ais523> AnMaster: RETRIEVE .2 + .3 + .4 
17:07:10 <ehird> we're talking about my language, ais523 
17:07:20 <ais523> ehird: ok, well INTERCAL gives each variable name its own stack 
17:07:24 <AnMaster> ehird, it would make variables kind of useless 
17:07:25 <ais523> so you can use them all synchronized for scoping 
17:07:34 <ehird> just take the variables from your caller 
17:07:36 <ais523> or you can have two different interlocking scoping schemes, if you like 
17:07:37 <ehird> and put them back before returning 
17:07:41 <ehird> you could write a function to do it 
17:07:49 <ehird> just do ->-2 in the function, and examine the variables 
17:07:50 <AnMaster> ehird, you need to know who your caller is 
17:07:51 <ehird> put them on the stack 
17:07:57 <AnMaster> to know what number of variables it has 
17:08:04 <ehird> -> is the reference to your caller 
17:08:15 <ais523> imagine C where you could write { braceint a = 2; /* a valid */ [ bracketint b = 3; /* a and b valid */ } /* b valid */ ] /* neither valid */ 
17:08:51 <ais523> INTERCAL's like that, except you can have a practically unlimited number of independent scoping mechanisms 
17:08:59 <ais523> (although there are only finitely many variable names) 
17:09:03 <ehird> WHAT. A ONE CHARACTER DOMAIN NAME. 
17:09:25 <AnMaster> ais523, believe it or not, but I actually wanted something like that when doing "serious" programming recently 
17:09:47 <oklopol> ehird: plz show me i can't see. 
17:09:51 <ehird> oklopol: look closer 
17:10:04 <ais523> AnMaster: I've said several times before that INTERCAL's control flow is really nice and actually suited to serious programming, just the lang isn't because its expressions are bad and string handling is awful 
17:10:10 <ais523> only I didn't think anyone was listening 
17:10:22 <AnMaster> ehird, what tld? There are so many now when since ICANN did that thing with them... I can't find witch one 
17:10:24 <ais523> ehird: is it a whitespace character, by any chance? 
17:10:41 <ais523> also, whose was .cx originally? 
17:10:47 <ais523> before it got taken over by goatse? 
17:11:05 <ehird> http://en.wikipedia.org/wiki/Christmas_Island 
17:11:10 <ais523> AnMaster: that isn't even a real country any mroe 
17:11:17 <ehird>  - 2006 estimate1,493 (n/a) 
17:11:21 <ais523> and all country codes are two chars 
17:11:22 <ehird> AnMaster: tat makes no sense :P 
17:12:17 <AnMaster> ehird, hm for balance I still think you need cometo and gofrom 
17:12:23 <ehird> quick! what's your favourite shade of gray? 
17:12:40 <ais523> and I said 192 before you said in hex 
17:13:23 <oklopol> why would you ask grey especially in hex? 
17:13:40 <oklopol> because you don't want people to do it the hard way? 
17:13:49 <ais523> AnMaster: that's pretty light 
17:14:00 <ehird> fefefe shows as white on every screen 
17:14:00 <AnMaster> ais523, yes I prefer white over grey 
17:14:04 <oklopol> that just about sums up me and AnMaster 
17:14:04 <ais523> so light that it would probably go out the other side of white on my screen at some angles 
17:14:13 <oklopol> 19:12… oklopol: 010101 || 19:13… AnMaster: #fefefe 
17:14:34 <oklopol> WE'RE THE SAME ONLY OPPOSITES 
17:14:39 <ais523> my screen's weird, it gets darker and darker as you adjust the angle (or lighter and ligher in the other direction), until it goes past the blackest or whitest colour and comes out the other side 
17:14:43 <AnMaster> oklopol, oh hm, this is some classical symbology(sp?) in that I think 
17:14:50 <ehird> ais523: that's not odd 
17:14:53 <ehird> that's typical LCD behaviour 
17:15:01 <ais523> typical LCD behaviour is weird, though 
17:15:07 <ais523> (I even know how it happens, to some extent) 
17:15:25 <oklopol> yes, 010101/fefefe is one of the texts in those jing-jang t-shirts 
17:15:36 <ais523> AnMaster: do you know how an LCD works? 
17:15:38 <AnMaster> oklopol, "jing-jang t-shirts"? 
17:15:46 <ais523> AnMaster: it's ying/yang in English, if that helps 
17:15:48 <oklopol> AnMaster: t-shirts with the symbol. 
17:16:08 <ais523> AnMaster: well, it's to do with the screens not being infinitely thin 
17:16:26 <ais523> so if you see them at an angle, the polarisation twisting isn't lined up perfectly 
17:16:44 <ais523> different voltages affect the amount of twisting to produce different colours, so it's possible you can twist more than 90 degrees and come out the other side of black 
17:16:45 <oklopol> i don't believe in polarization, i think. 
17:16:47 <AnMaster> that I know of, though this one has a pretty good viewing angle 
17:16:59 <ais523> if a weird viewing angle is rotating it too far 
17:17:07 <AnMaster> I need to go around 80 degrees before I notice anything 
17:17:08 <oklopol> i haven't decided really, but that sounds like something i don't have to believe in 
17:17:15 <ais523> AnMaster: it must be a good thin one then 
17:17:20 * ehird licenses his stuff under Creative Commons Attribution 1.0  Generic 
17:17:22 <ehird> because he is oldschool 
17:17:24 <ais523> oklopol: do you have a calculator? 
17:17:26 <ehird> and because newer versions are useless 
17:17:43 <ais523> oklopol: if you don't believe in polarisation, how can you see the numbers on it/ 
17:17:51 <AnMaster> ais523, also it isn't inverted video even at 90 degrees 
17:18:04 <ais523> oklopol: have you ever looked at your calculator through a polarising filter? 
17:18:05 <oklopol> doesn't involve polarizing anything afaik! 
17:18:08 <ehird> oklopol: don't ever start making sense <3 
17:18:15 <oklopol> ais523: think i believe in those? 
17:18:17 <ais523> from inside another calculator would do, although it's a bit hard to climb inside them 
17:18:25 <oklopol> they're just slightly shaded glass 
17:18:47 <ais523> oklopol: if you have two polarising filters next to them, and start rotating them 
17:18:52 <ais523> then it becomes clear they aren't shaded glass 
17:19:08 <AnMaster> ais523, you think oklopol is serious? 
17:19:17 <AnMaster> actually, that would be ehird's comment to me 
17:19:27 <ehird> oklopol is serious 
17:19:29 <oklopol> ais523: well. that's a bit hard to explain ;=) 
17:19:38 <oklopol> I GUESS WE'LL NEVER KNOW WHY THAT HAPPENS. 
17:19:48 <ais523> there are lots of things you can more or less get away with not knowing, or not agreeing with whilst being wrong 
17:19:48 <oklopol> maybe i should open my rwh now 
17:19:55 <AnMaster> oklopol, do you believe in Star Trek? 
17:20:39 <oklopol> ais523: true. but science isn't exact, knowing it might be useless if it happens to be wrong. 
17:20:46 <ehird> real world haskell 
17:20:57 <AnMaster> oklopol, do you believe in Star Trek? 
17:21:08 <oklopol> well okay, i guess i should believe in polarization, because it's so effing cool 
17:21:12 <ais523> anyway, I'm an engineer, and engineers know things that tend to work in practice are often useful even if they are wrong 
17:21:19 <oklopol> i'll believe it's a close approximation of how light works 
17:22:03 <oklopol> ais523: well, an abstraction can't really be "wrong" 
17:22:06 <AnMaster> ais523, anyway the color issue is much larger on laptops than desktop TFTs in my experience 
17:22:17 <oklopol> you might just realize it's a bad abstraction 
17:22:30 <oklopol> but if it was once useful, probably it's still useful 
17:22:35 <ais523> polarisation's just statistical behaviour anyway 
17:22:39 <ais523> but one which is nice to know about 
17:22:51 <ais523> AnMaster: I'd guess the screens are better-quality on desktop TFTs 
17:23:58 <AnMaster> ais523, I do notice colour shift at the edge for certain slightly off white values, need to be around 254,254,254 before I notice it though 
17:24:21 <ehird> who wants to stop things sucking????? 
17:24:24 <AnMaster> ais523, in other aspects this monitor is really low quality :( 
17:24:35 <AnMaster> ais523, like the foot of it, not very well adjustable 
17:24:47 <AnMaster> or the fact it is VGA only, no DVI 
17:24:55 <oklopol> ais523: do you play chess? 
17:25:02 <ais523> I used to, although I haven't for ages 
17:25:19 <ais523> I was the captain of the house chess team, and played for the school first team 
17:25:24 <ais523> but I haven't played for about 4 years now 
17:25:34 <ais523> my brother's much better than I am 
17:25:42 <ais523> and sort of lapsed-decent, rather than awesome 
17:25:48 <ehird> I'm awful at chess. 
17:25:49 <ais523> really out of practice 
17:26:11 <ehird> oklopol: you're not perfect at something? 
17:26:14 <ais523> you can get a lot better at chess by not making mistakes 
17:26:28 <ais523> in fact, I think that gets you right up above grandmaster level 
17:26:34 <ais523> the mistakes just get more subtle as time goes on 
17:26:37 <oklopol> ehird: i'm actually relatively bad at games where every move can get you killed 
17:26:41 <ais523> hmm... chess is like NetHack in that respect 
17:26:48 <oklopol> the more robust the better i get 
17:26:54 <oklopol> i'm like an anticomputer at games 
17:27:00 <ehird> proto: chess, the FPS 
17:27:17 <ehird> ais523: if i knew  that it wouldn't be a proto 
17:27:22 * ais523 games little enough that they had to think about the acronym... 
17:27:35 <ais523> ehird: even you aren't that fast at coding 
17:27:36 <oklopol> ais523: oh, that wasn't a joke? 
17:28:25 <oklopol> the reason i can't do chess is 
17:28:34 <ais523> it wasn't much of a joke 
17:28:36 <oklopol> i think like 7 plies ahead 
17:28:45 <oklopol> then move the last piece in my train of thought 
17:28:46 <ais523> generally speaking, the person who loses a game of chess is the first to make a mistake 
17:28:50 <ais523> unless the other makes a bigger mistake later 
17:28:51 <oklopol> because at that point i've solved the situation 
17:28:56 <ais523> and heh, I do that as well 
17:29:19 <oklopol> 7 was just a random number 
17:29:24 <ais523> I'm no good at visualising more than about 2 plies 
17:29:31 <ehird> I -can't- think ahead. :P 
17:29:51 <ehird> heh, once I wrote a tic tac toe solver whose objective was to beat itself 
17:29:55 <ais523> ehird: you're forked, then 
17:29:56 -!- kar8nga has quit (Connection timed out). 
17:30:01 <ehird> (when it looked ahead (brute-force), it played against itself) 
17:30:12 <oklopol> ehird: that's how you always do it 
17:30:13 <ehird> naturally, it was pretty awful 
17:30:23 <ehird> because it only ever tried to be better than itself 
17:30:24 <oklopol> that's the way to brute-force games 
17:30:27 <ehird> it's a recursive issue 
17:30:47 <ais523> oklopol: it depends on what the evaluation function was 
17:30:56 <ais523> but for noughts-and-crosses, you can analyse until the game ends 
17:31:12 <ehird> ais523: basically, "if I beat or tie myself, this is a good solution" 
17:31:20 <ehird> but since that's the definition of itself, it kind of sucked 
17:31:44 <AnMaster> I think it would always end at a draw 
17:31:49 <ais523> ehird: that's actually the best possible (if not fastest) algorithm if you brute-force to the end and know whether a position's won, lost, drawn or unfinished 
17:31:52 <oklopol> hmm. i don't understand how that's different from just brute-forcing the perfect solution 
17:32:02 <ehird> ais523: i think you misunderstand :D 
17:32:08 <ehird> oklopol: because it doesn't fight against every possibility 
17:32:11 <ehird> just every possibility that is tried 
17:32:18 <ehird> and yet that's how you determine what to try... 
17:32:26 <ais523> ehird: if it's brute-forcing, it does try every possibility 
17:32:30 <oklopol> so what does top-level try? 
17:32:35 <ehird> ais523: nope, it didn't 
17:32:41 <oklopol> what happens when first move happens? 
17:32:46 <ais523> then you aren't brute-forcing, so what are you doing? 
17:32:50 <ehird> ais523: i wish I knew 
17:33:02 <ehird> hmm, cgit's template files are c files 
17:33:06 <ehird> that's disappointing 
17:33:14 <AnMaster> isn't taking the middle square the best first move in tic tac toe? 
17:33:20 <oklopol> well. the idea is brute-forcing, maybe you're just fucking it up somehow ;) 
17:34:20 <ehird> http://hjemli.net/git/cgit/tree/ui-log.c :( 
17:34:25 <ais523> AnMaster: it doesn't matter which square you take 
17:34:36 <ehird> ais523: errr yes ti does? 
17:34:37 <ais523> it's a draw for all 9 possible starting moves 
17:34:53 <ais523> although if you start in a corner, the opponent has to reply in the middle to avoid losing 
17:34:58 <ehird> right but with the middle you have more of a chance of -winning- against an idiot 
17:35:17 <ais523> ehird: only if you assume the idiot plays in the middle given the chance 
17:35:26 <ehird> even idiots do that. 
17:35:26 <ais523> if you play in the corner, the idiot has 7 losing moves and only 1 drawing move 
17:35:33 <ais523> if you play in the middle, the idiot has a 50/50 chance 
17:35:37 <ais523> same if you play at an edge 
17:36:29 <AnMaster> how many possible tic tac toe games are there? 
17:36:37 <ehird> few hundred thousand 
17:36:42 <ehird> less if you discard symmetrical ones 
17:36:48 <ais523> so yes, about a few hundred thousand 
17:36:56 <ais523> if you discard symmetry, it's less than 100 IIRC 
17:36:57 <oklopol> nine factorial is an upper bound 
17:36:58 <ehird> less if you discard duplicates. 
17:37:12 <ais523> oklopol: oh, because the games can end before all the squares are filled/ 
17:37:16 <oklopol> not all games only after last move 
17:37:28 <AnMaster> ais523, even when the other person don't play perfect? and when you consider taking a first then b or b first then a different? 
17:37:30 <oklopol> not all games *fucking end* only after last move 
17:37:36 <AnMaster> though both could lead to the same end result 
17:38:02 <oklopol> AnMaster: the one that was incorrect or the one with fuck? 
17:38:04 <ais523> AnMaster: yes and no to your two questions 
17:38:37 <oklopol> i mean if you meant the first one, why would you quote a broken sentence? and if you meant the latter one, please don't swear, it's not your style 
17:39:10 <ehird> AnMaster: say fuck 
17:39:22 -!- tyrelle has left (?). 
17:39:30 * ais523 wonders whether to surprise everyone by saying lol 
17:39:33 <oklopol> yes of course nine factorial is a pretty loose upper bound also because the order doesn't matter 
17:39:46 <AnMaster> ehird, not when you told me to 
17:39:49 <ais523> AnMaster: I've typed it before, but only in quoted contexts 
17:39:51 <ehird> AnMaster: don't say fuck 
17:39:56 <ais523> I haven't actually used it, just mentioned it 
17:40:00 <oklopol> not taking order into account isn't even much harder than taking the factorial 
17:40:01 <AnMaster> ehird, too late, I don't fall for that trick 
17:40:16 <oklopol> you just take 4 out of 9... 
17:40:20 <AnMaster> I only ever quote the word too 
17:40:24 <ais523> of course I know of the existence of lol 
17:40:29 <AnMaster> I think I used "lol" once really 
17:40:32 <ais523> just people don't use it with its intended meaning 
17:40:37 <ais523> so it's become meaningless recently 
17:41:04 <ais523> sometimes I do laugh out loud; I have been for about 5 minutes now (good thing there's nobody else in here) 
17:41:13 <ais523> but "lol" is no longer a good way to express that 
17:41:32 <AnMaster> "as long as there are humans or other creatures to play it there can be more" 
17:41:33 <ais523> AnMaster: Of course it isn't, there are more than 9 games! 
17:41:50 <AnMaster> ais523, that was ! as in factorial 
17:41:59 <ehird> way to ruin his joke 
17:42:46 <oklopol> 9 choose 4, *not* nine factorial 
17:43:04 <ais523> you can tell I was joking due to the capital letter at the start of the sentence, the joke didn't work without it 
17:43:07 <oklopol> it's like one character longer, and seven billion times smaller. 
17:43:12 <ais523> and I rarely do that normally 
17:43:40 <ais523> hmm... maybe we should come up with a new IRC convention, which states that correct capitalisation and punctuation indicates sarcasm 
17:43:45 <ehird> 17:19:29 <Sgep> PESOIX? 
17:43:45 <ehird> 17:19:33 <Sgep> <-- new 
17:43:49 <oklopol> ais523: it already does imo 
17:43:50 <ais523> I mean, completely correct, initcaps and fullstop at the end 
17:44:24 <oklopol> well, not completely correct, but that's one standard way to indicate you're not being serious, if you don't do that normally 
17:45:53 <ehird> oklopol: teach me j 
17:46:06 <AnMaster> what is the ORDER BY to sort backwards 
17:46:35 <oklopol> actually that upper bound actually isn't correct 
17:46:38 <ais523> but for a moment, I thought you were correcting ehird, saying that ehird really meant to ask oklopol to teach him J in SQL 
17:46:41 <oklopol> once you take into accound games can end prematurely 
17:47:04 <ehird> ais523: i thought AnMaster thought oklopol was showing AnMaster some code that he'd asked for 
17:47:05 <oklopol> blah. is suck at translating reality into math 
17:47:08 <ehird> and he wanted it in sql instead 
17:47:37 <oklopol> also ais523 said that already 
17:47:43 <ais523> wait, I'm trying to follow the threads of conversation here 
17:47:46 <AnMaster> great it didn't sort correctly when selecting from the sorted view 
17:47:56 <ais523> it's almost feels as if there are two conversations 
17:47:59 <ais523> only they're impossible to separate 
17:48:04 <oklopol> ais523: there are always multiple 
17:48:10 <ais523> yes, but rare for them to get this intertwined 
17:48:20 <ehird> 21:04:58 <heatsink> It would be more esoteric to make pop-from-empty-stack read from stdin :) 
17:48:51 <ais523> what, on division by 0? 
17:48:57 <oklopol> "why not have the arguments of the program in the stack!!" 
17:49:06 <ais523> and <> reads from stdin on Perl when it runs out of argv 
17:49:07 <ehird> oklopol: thats not related 
17:49:13 <oklopol> but if you consider stdin the args to the program 
17:49:19 <ehird> "The stack is empty. What value should be on top?> " 
17:49:54 <AnMaster> is INNER JOIN or LEFT JOIN fastest in general? 
17:50:01 <AnMaster> all those join types confuse me 
17:50:03 <oklopol> well then that's just an object that has two separate uses, which are intertwined to make it very error-prone 
17:50:10 <ais523> because it doesn't have to compare against NULL 
17:50:14 <ais523> but they do different things 
17:50:30 <AnMaster> ais523, all columns are NOT NULL, and in my case they end up doing the same result 
17:50:30 <ais523> if you're asking which is fastest, either you're doing something really weird or you aren't thinking about the problem 
17:50:36 <ehird> you know what sucks? 
17:50:39 <ais523> oh, then they should take exactly the same length of time 
17:50:45 <ehird> navigation should be implicit 
17:50:46 <ais523> if you have at least a half-decent database engine 
17:51:06 <ais523> inner is faster for the same reason ++i is faster than i++ 
17:51:17 <AnMaster> ais523, except this is mysql (eww yes I know, I hate it, not my choice), and EXPLAIN says INNER JOIN here doesn't use the indexs 
17:51:23 <ehird> the question is how you implicitify navigable aids without making a separate form for them. 
17:51:31 <ais523> AnMaster: MySQL's optimiser is strange, it seems to pick at random 
17:51:37 <ais523> what happens if you add a FORCE INDEX to it? 
17:51:48 <AnMaster> ais523, SQL error... let me try again 
17:52:01 <ais523> I never can remember exactly where you're supposed to put it 
17:52:35 <ehird> i don't think form is inherently navigable. 
17:52:36 <AnMaster> ais523, actually if I add a WHERE <primary key of first table> = <some integer> first explains says they are the same 
17:53:39 <ais523> AnMaster: is it a small table? 
17:53:53 <AnMaster> ais523, currently yes, expected to grow a lot in the future 
17:53:54 <ais523> on small tables, MySQL sometimes randomly decides that using an index isn't worth the bother 
17:53:58 <ais523> and often it's actually right 
17:54:11 <ais523> it would be nice to have an EXPLAIN ON HYPOTHETICAL BIG TABLE SELECT 
17:55:01 <AnMaster> 1  SIMPLE  history  ref  tid,pid  pid  4  const  2  Using where 
17:55:31 <ais523> AnMaster: well, const is a pretty useful join type to have 
17:55:41 <ais523> it's the second-fastest 
17:55:53 <AnMaster> ais523, which one is the fastest then? PRIMARY I assume? 
17:56:01 <ais523> AnMaster: no, the type where the table only has one row 
17:56:06 <AnMaster> well thing is... I *only* select on primary keys 
17:56:14 <ais523> PRIMARY's not a join type, it's a key type 
17:56:25 <AnMaster> and join on "not primary -> primary" 
17:56:35 <AnMaster> but primary index should be the fastest 
17:56:43 <ais523> AnMaster: not on MyISAM 
17:56:52 <ais523> all indexes are equally fast there IIRC 
17:57:00 <AnMaster> ais523, innodb since I need foreign key constraints 
17:57:06 <ais523> oh, primary is fastest there 
17:57:15 <AnMaster> SELECT history.revid, history.tid, text.uid, text.timestamp, text.title, user.realname FROM (history INNER JOIN `text` ON (history.tid = text.tid) INNER JOIN user ON (text.uid = user.uid)) WHERE history.pid = 4 ORDER BY history.revid DESC 
17:57:22 <ais523> InnoDB is too much trying to be like other database engines, IMO 
17:57:34 <AnMaster> ais523, I would much prefer postgresql 
17:57:38 <ais523> they should stick to MyISAM which is not a database in the conventional sense, but is nonetheless useful 
17:57:55 <AnMaster> ais523, anyway can you see anything obviously stupid in the above query? 
17:58:15 <AnMaster> I guess I can let this pass for now... 
17:58:20 <ais523> that should be 3 const lookups, one using where 
17:58:23 <ais523> which should be very fast 
17:58:32 <ais523> unless you have duplicate pids in the history table 
17:58:42 <ais523> or duplicate tids in text, or duplicate uids in user 
17:58:56 <AnMaster> pids in history can be duplicate 
17:59:08 <AnMaster> no other key I'm testing on can be 
17:59:11 <ais523> in that case, it should be const/const/const, with affected rows (small number), 1, 1 
17:59:27 <ais523> so no, nothing looks wrong with that 
17:59:32 <AnMaster> id select_type table type possible_keys key key_len ref rows Extra 
17:59:32 <AnMaster> 1 SIMPLE history ref pid pid 4 const 2 Using where 
17:59:32 <AnMaster> 1 SIMPLE text eq_ref PRIMARY PRIMARY 4 vcms.history.tid 1  
17:59:32 <AnMaster> 1 SIMPLE user eq_ref PRIMARY PRIMARY 4 vcms.text.uid 1  
18:00:01 <AnMaster> ais523, and sorry, text.uid and history.pid can be dup 
18:00:08 <ais523> ref const, eq_ref primary, eq_red primary 
18:00:17 <ais523> three O(1) queries joined 
18:00:21 <ais523> well, O(number of results) 
18:00:26 <AnMaster> ais523, where are those abbreviations explains 
18:00:31 <ais523> which is much faster than O(size of database), which is what slow queries are 
18:00:37 <AnMaster> also number of results depend on number of edits on the page 
18:00:43 <ais523> AnMaster: there's a whole chapter of the MySQL docs about it 
18:00:54 <ais523> also, you can't possibly get faster than O(n) in the number of results, for obvious reasons 
18:01:15 <AnMaster> ais523, I expect at least quite a few results. 
18:01:38 <ais523> you can't optimise that any faster in computational class terms, so don't try 
18:01:50 <ais523> micro-optimising is just not worth it 
18:02:23 <AnMaster> I was just confused why it didn't want to use indexes sometimes 
18:02:37 <ais523> AnMaster: because the table was so small that a full table scan was faster than loading the indexes 
18:03:44 <AnMaster> ais523, true I don't have a lot of entries yet since I'm continually changing the schema when I find bugs 
18:03:57 <AnMaster> so I have an sql file that I change then import that resets the database 
18:04:15 <AnMaster> ais523, also what about longtext type, is it sane for using to store pages in? 
18:04:27 <ehird> longtext is too long 
18:04:29 <AnMaster> I have been unable to find info about that in the mysql docs 
18:04:31 <ais523> I'm not sure, but I think so 
18:04:36 <oklopol> err left join was join + keep all entries of leftie, inner was just join? 
18:04:37 <ais523> longtext is for pretty massive pages 
18:04:47 <ais523> oklopol: yes, pretty much 
18:04:48 <AnMaster> ehird, hm isn't text like 32 kb? 
18:05:11 <ais523> as MySQL like using whole numbers of bytes 
18:05:28 <ehird> what are you storing 
18:05:30 <ais523> and 64 KiB = a two-byte length 
18:05:45 <ehird> if it isn't, fix your pages :P 
18:05:54 <AnMaster> ehird, well ever looked at gentoo wiki? 
18:05:57 <ais523> ehird: what if they have embedded data: URLs to images? 
18:06:01 <ehird> yes, and I never looked again, AnMaster 
18:06:30 <AnMaster> well, long text it is, though this isn't gentoo wiki 
18:07:00 <oklopol> sql doesn't have an infinitely extending type? 
18:07:07 <oklopol> or am i completely out of context 
18:07:27 <oklopol> (i don't really know much about practical db's, as should be obvious) 
18:07:38 <ehird> oklopol: what do you think about my work in progress db? 
18:07:41 <ehird> it serializes objects to a graph 
18:08:04 <oklopol> (except queries, but of course just the actual query syntax) 
18:08:43 <AnMaster> contact me the day when the product is ready :P 
18:08:51 <ehird> go to hell, practical jackass. :| 
18:09:25 <oklopol> yeah, who wants to finish a program when you already know how to do it 
18:09:26 <AnMaster> ehird, hey I was all for your comefrom/goto lang 
18:09:35 <kerlo> I hate doing things I already know how to do. 
18:09:53 <oklopol> kerlo: yeah they're almost as bad as things i don't know how to do 
18:10:03 <kerlo> Well, eating is an exception. It's an instant gratification thing. 
18:10:26 <kerlo> I hate doing both. :-) 
18:10:43 <ehird> I hate eating, sleeping and waking up, but not messing around on IRC 
18:10:59 <kerlo> Yeah, messing around on IRC is fine because you don't have to actually do anything. 
18:11:17 <oklopol> well at least you don't have to achieve anything. 
18:11:21 <AnMaster> ok this is evil, a wiki that requires users to use valid xhtml 1.1 syntax (filtered to a safe set of whitelisted tags, attributes and attribute values) 
18:11:37 <ehird> markdown isn't horrible 
18:11:37 <kerlo> Unfortunately, I have obligations. 
18:11:48 <AnMaster> ehird, well I was thinking of mediawiki syntax 
18:11:57 <ais523> AnMaster: the requirement for valid xhtml 1.1 is so it can be filtered more easily? 
18:11:58 <AnMaster> also for extra eww this is coded in php 
18:12:11 <AnMaster> ais523, no because otherwise firefox renders it badly 
18:12:20 <AnMaster> when you send the correct mime type 
18:12:31 <ais523> but I mean, why did they pick XHTML 
18:12:39 <ais523> my guess is so it's easier to filter 
18:12:41 <ehird> ais523: AnMaster loves XHTML because it's newer. 
18:12:47 <ehird> what am postel's law? what am server-side filtering? 
18:12:51 <ehird> what am intelligence 
18:12:55 <AnMaster> ais523, also it is easier to filter 
18:13:06 <ais523> ehird: yes, what /am/ postel's law? 
18:13:18 <ehird> ais523: what am google 
18:13:20 <ais523> although "what am intelligence" seems surprisingly philosophical 
18:13:51 <AnMaster> not even tables for form layout 
18:14:02 <ais523> AnMaster: how do you enforce that rule? 
18:14:03 <ehird> never mind that 500 other people do that. 
18:14:16 <AnMaster> ais523, I don't, but I mean the software in itself 
18:14:32 <AnMaster> iirc even mediawiki use(ed?) tables for login form 
18:15:18 <AnMaster> <td class="mw-label"><label for='wpName1'>Username:</label></td> 
18:15:18 <AnMaster> <input type='text' class='loginText' name="wpName" id="wpName1" 
18:15:37 <ais523> not sure if it still does 
18:15:56 <AnMaster> ais523, that was from en.wikipedia 
18:16:13 <AnMaster> ais523, maybe it doesn't in trunk 
18:16:46 <ais523> AnMaster: I doubt they've fixed it 
18:16:59 <ais523> changing one CSS identifier in MediaWiki causes people to kick up a stink sometimes 
18:17:09 <AnMaster> ais523, btw: http://rafb.net/p/LWWpzm49.html 
18:17:12 <ais523> "You should have consulted the community before messing up all our non-robust scripts!" 
18:17:22 <AnMaster> ais523, that is my login form, that renders the same way 
18:17:33 <AnMaster> yes mediawiki themeing is a mess 
18:17:39 <AnMaster> it should be just changing a css file 
18:17:58 <AnMaster> ais523, for register there is such support, but register isn't coded yet 
18:18:15 <ehird> AnMaster: you're actually building a wiki that requires completely valid, whitelisted xhtml 1.1 as its page input? 
18:18:20 <AnMaster> as in, register.php is: <?php die("TODO"); ?> 
18:18:20 <ehird> wow, you're more idiotic than I previously thought possible 
18:18:33 <AnMaster> ehird, not my choice, this is for a school course 
18:18:33 <ais523> actually, I like the idea 
18:18:46 <ais523> although it would be for different purposes than Wikipedia, say 
18:18:47 <ehird> AnMaster: I am sure "completely-valid XHTML 1.1" is your choice. 
18:18:56 <ehird> Also, I really don't care who likes the idea, because it's a bad one. 
18:19:03 <AnMaster> ais523, oh and it uses object orientation in php 
18:19:04 <ais523> instead of a quick-edit anyone-can-join wiki, it would be a lets-use-this-to-maintain-a-website wiki 
18:19:12 <ais523> AnMaster: so do lots of other PHP programs 
18:19:19 <ehird> Maintaining a website in XHTML 1.1 is grounds for the death penalty. 
18:19:35 <AnMaster> ais523, btw my login form css basically works similar to this: http://www.websiteoptimization.com/speed/tweak/forms/ 
18:19:37 <ais523> no, but I've tried to read code that uses it 
18:19:45 <AnMaster> except not px but em for the sizes 
18:19:53 <ais523> ehird: maintaining a website in XHTML is taking all the suffering onto yourself for the good of the rest of the world 
18:19:58 <ais523> writing in plain HTML is being selfish 
18:19:59 <ehird> ais523: no, there is no good 
18:20:04 <ehird> there are no exceptions to postel's law 
18:20:14 <ais523> ehird: writing in XHTML /is/ postel's law 
18:20:33 <ais523> it is, because it's very strict and easy to parse for other programs 
18:20:42 <ehird> valid, well-formed, XHTML 1.1 is no more cleaner and easy to process than the same with HTML 4.01 
18:20:46 <ais523> AnMaster: check on Wikipedia, which calls it something else but has a redirect 
18:20:47 <ehird> so sorry, that's just bullshit. 
18:20:52 <ais523> ehird: and yes it is, you can't process HTML with CSLT 
18:21:08 <ehird> except you shouldn't process with XSLT, one because it sucks ,and two because it violates postel's law 
18:21:23 <AnMaster> ais523, I don't do that, but it would be nice to allow 
18:21:56 <AnMaster> ehird, also the code is made so it would be easy to plug in a wiki-syntax engine 
18:22:11 -!- Corun has quit (Read error: 110 (Connection timed out)). 
18:22:26 <AnMaster> two places only, vcms_page->preview(); and vcms_render->render() 
18:22:51 <AnMaster> oh and never touch page id -1 because that means it is some internally generated page, like the login page 
18:24:51 <ais523> ehird: do you favour Postel's Law for everything, or only for internet communications? 
18:24:59 <ais523> do you favour it for, say, functions inside a C program? 
18:25:15 <ehird> ais523: It is complicated. 
18:25:26 <AnMaster> ais523, I don't think so, he claimed he disliked "defensive coding" recetly 
18:25:28 <ehird> For closed-world things -- e.g., functions inside a C program -- it doesn't apply. 
18:25:41 <ehird> For open-world things -- e.g., the entry point of a C program, or a website -- it applies. 
18:25:50 <AnMaster> and I tend to agree, though assert() is an exception. 
18:25:57 <ehird> One is controlled, the other isn't. 
18:26:24 <ais523> AnMaster: I'm currently trying to get a BF interpreter to pass splint strict mode 
18:26:32 <ais523> it requires jumping through all sorts of hoops 
18:26:34 <ehird> http://diveintomark.org/archives/2004/01/08/postels-law 
18:26:35 <ehird> http://www.aaronsw.com/weblog/001025 
18:26:37 <ehird> http://www.b-list.org/weblog/2008/jun/18/html/ 
18:26:41 <ehird> Read those (in order.) 
18:26:43 <ais523> I have an auxiliary /function/ guarded by NDEBUG 
18:26:58 <ais523> which checks if argc is larger than a certain value 
18:27:02 <ais523> and takes argv as an argument and ignores it 
18:27:22 <ais523> the function is expressing the fact that argv has argc elements, in a way that splint can understand and verify is correct 
18:27:39 <AnMaster> I have a few NDBUG guarded funcs in cfunge, dumping functions, "clean up on exist to make valgrind output simpler, even though this could be left to the OS" 
18:28:11 <AnMaster> ais523, but your sounds strange 
18:28:20 <ais523> maybe I should paste it 
18:28:25 <AnMaster> I would check argc in main() probably 
18:28:32 <AnMaster> or actually, I would use getopt() 
18:28:40 <ais523> oh, so do I, but Splint didn't notice it there 
18:28:43 <AnMaster> yes it is POSIX, but I don't care about windows 
18:28:45 <ais523> and I'm not even getting options 
18:29:00 <ais523> I'm trying to persuade Splint that I can read the first command-line arg without buffer overflow 
18:29:03 <ehird> The nice thing about dependently typed languages is that you can statically prevent incorrect data. 
18:29:21 <ais523> the buffer-overflow checks are a bit primitive, you have to jump through loads of hoops to guarantee to it that you're doing things right 
18:29:23 <AnMaster> ais523, hopefully the OS should leave a \0 at the end of it... 
18:29:39 <ais523> AnMaster: again, it does 
18:29:50 <ais523> but Splint doesn't have a "this is a null-terminated array of strings" annotation 
18:30:04 <AnMaster> ais523, well paste that function then 
18:30:28 <AnMaster> ais523, also does it have a "this is a null terminated string?" annotation? 
18:30:34 <ehird> e.g., main :: [string] `ofLength` 2 -> io () 
18:30:47 <ehird> then (main a = print a) will fail 
18:31:17 <ais523> strange, my web browser's going slow 
18:31:21 <ais523> also, I don't think so, strange really 
18:31:32 <ehird> because you need to _prove_ to the compiler that you can't pass it non-2 length arrays 
18:31:32 <ehird> you have to prove to the compiler that the array you passed it is of length 2 
18:31:35 <ehird> so in your entry point, you have to check the length of the array 
18:31:41 <ehird> before calling main 
18:31:51 <ais523> AnMaster: http://rafb.net/p/sRPjBK56.html is the whole program 
18:31:56 <ehird> AnMaster: a hypothetical Haskell with dependent types 
18:31:59 <ais523> check_argc_argv is the relevant function 
18:32:19 <ehird> dependent types give you immense flexibility and awesome, at the expense of not being able to prove that your compilation will terminate 
18:32:30 <ehird> (because the type system == the normal language, and is therefore TC) 
18:32:39 <ais523> AnMaster: "This function does not modify any global variables" 
18:32:49 <AnMaster>   /* Splint seems not to know about assert... */ 
18:32:49 <AnMaster>   if (argc < minlength) {abort();} 
18:32:58 <AnMaster> if it doesn't know, why not remove it? 
18:33:08 <ais523> it does know about assert, just doesn't notice it for some reason 
18:33:45 <AnMaster> ais523, know what? I would give up on splint instead of doing that 
18:33:56 <ais523> AnMaster: you don't understand, this is an eso project 
18:34:03 <AnMaster> also the splint project was in practise dead last I checked 
18:34:05 <ais523> I have splint's warning levels /way/ above the typical levels 
18:34:14 <ais523> cfunge is designed to be as fast as possible 
18:34:21 <ais523> this program is designed to be as Splintable as possible 
18:34:27 <ais523> still not perfect, btw 
18:34:42 <ais523> it thinks there are some potentially undefined structure fields, and I have to resort to /*@- on occasion and I don't want to 
18:34:44 <ehird> i think you could get very far by hooking a dependent types layer onto C 
18:34:50 <AnMaster> /*@requires maxRead(argv) == argc 
18:34:51 <AnMaster>  /\ maxRead(tape) >= 100663378;@*/ 
18:35:02 <ais523> AnMaster: it's from logic 
18:35:23 <AnMaster> ais523, well the splint devs were making a program checking C source, maybe C notation would have made sense then 
18:35:46 <AnMaster> also the logic notation is one symbol and not some sort of mini-ascii art of it 
18:35:47 <ais523> don't ask me to make Splint make sense 
18:35:56 <ais523> although Splint has inspired me to write an esolang, btw 
18:35:59 <ehird> void real_main(int argc /**@ == length(array)*/, char **argv /**length(@) == 3 */) 
18:36:06 <ehird> and then the layer requires you to prove it in calls 
18:36:14 <ais523> which is like C, but impossible to write buggy programs in 
18:36:20 <ais523> well, logic bugs still possible 
18:36:28 <ehird> int main(int argc, char **argv) { if (argc != 3) { ...error... } else { real_main(argc, argv); } } 
18:36:29 <AnMaster> also there are langs like that 
18:36:30 <ais523> but memory leaks and buffer overflows and so on impossible 
18:36:35 <ehird> and since argc == length(argv) 
18:36:37 <ais523> and of course there are 
18:36:38 <ehird> and argc is verified to be 3 
18:36:40 <ehird> the preconditions are met 
18:36:41 <ais523> but the point is, to do it in C 
18:36:43 <AnMaster> ais523, BitCC and Cyclone may interest you 
18:36:44 <ehird> and the program can compile 
18:36:49 <ais523> so you still have to write the free()s and so on 
18:36:54 <AnMaster> both are made to be hard to write buggy things in 
18:36:55 <ais523> the compiler just verifies they're there 
18:37:42 <AnMaster> ais523, could be done as a GCC middle end maybe? 
18:37:50 <ais523> I didn't even know it had middle ends 
18:37:59 <ais523> the problem is that the front end/back end transition is blurry 
18:38:00 <AnMaster> ais523, note what I said after 
18:38:10 <ais523> there's a chain of back ends, more or less 
18:38:18 <ais523> and the various front ends filter into different places in it 
18:38:28 <ais523> even gcc-bf has to interact with the front ends slightly 
18:38:28 <AnMaster> ais523, where does mudflap in GCC insert it's calls? 
18:38:37 <ais523> to tell them how to send data to the back ends 
18:38:53 <AnMaster> ais523, I assume you know what -fmudflap is though? 
18:38:57 <ais523> (gcc-bf has to request varargs calls to be sent a certain way, so it can handle them) 
18:39:02 <ais523> AnMaster: I do, but not how it works 
18:39:21 <AnMaster> ais523, inserting lots of canary values iirc and checking every read/write access 
18:39:27 <ais523> yes, I mean inside gcc 
18:39:30 <ais523> I don't know what it hooks into 
18:39:31 <AnMaster> somewhat like valgrind except it can catch some stuff gcc doesn't 
18:39:43 <AnMaster> err catch some stuff valgrind doesn't 
18:39:52 <AnMaster> like 2 valid variables after each other 
18:40:11 <AnMaster> if both are static valgrind can't check that access doesn't pass from one over to the other 
18:40:51 <AnMaster> of course valgrind finds stuff mudflap doesn't 
18:41:32 <AnMaster>     /*@-retvalint@ We don't care if fputs fails, we can't do anything... */ 
18:41:40 <AnMaster> ais523, why not cast each to (void) 
18:42:20 <ais523> AnMaster: hmm... I wonder if that works 
18:42:25 <ais523> I've been casting to void elsewhere 
18:42:32 <AnMaster> ais523, also:    default: continue; /* a comment */ 
18:42:35 <ais523> but possibly Splint doesn't let you do that for non-printf functions 
18:42:52 <ais523> I must have phased out there 
18:42:57 <ais523> no idea what the comment was meant to say 
18:43:09 <ais523> that case catches comments in the input BF 
18:43:26 <ehird> Musings on a static analyzer for C: http://pastie.org/352320 
18:43:52 <ais523> let's make something like Splint that actually works 
18:43:58 <ehird> ais523: see http://pastie.org/352320 
18:44:15 <ais523> that's very splint-like 
18:44:21 <ehird> yes, but more general 
18:44:23 <AnMaster> ais523, and can handle ## in macros 
18:44:28 <ehird> [and compile-time turing complete :DDDDDD] 
18:44:52 <ais523> AnMaster: and trigraphs? 
18:44:59 <ais523> (N.B. I haven't tried to run Splint with trigraphs) 
18:45:12 <ais523> besides, you're in C99, you have digraphs now 
18:45:26 <AnMaster> ais523, I don't use digraphs either 
18:45:26 <ais523> yes, they were added as they're easier to type than trigraphs 
18:45:39 <ehird> oi, people, obsess over my awesome. 
18:45:51 <ais523> AnMaster: they're useful if your character set doesn't have { in 
18:46:03 <ais523> I mean, how else would you type C in such a character set? 
18:46:12 <AnMaster> ais523, I'm not sure if it does, but I sure hope POSIX requires that 
18:46:26 <ais523> AnMaster: there's a standard for which characters are guaranteed in a character set 
18:46:37 <ais523> which is why C has digraphs 
18:46:48 <ais523> (and formerly trigraphs) 
18:46:49 <AnMaster> ais523, true, but I think all POSIX systems would have it or? 
18:46:55 <ais523> does POSIX require ASCII/ 
18:47:41 <ehird> incidentally, you can take proves further 
18:47:51 <AnMaster> Conforming implementations shall support one or more coded character sets. Each supported 
18:47:51 <AnMaster> locale shall include the portable character set, which is the set of symbolic names for characters in 
18:47:51 <AnMaster> Table 6-1. This is used to describe characters within the text of POSIX.1-200x. The first eight | 
18:47:51 <AnMaster> entries in Table 6-1 are defined in the ISO/IEC 6429: 1992 standard and the rest of the characters | 
18:47:51 <AnMaster> are defined in the ISO/IEC 10646-1: 2000 standard. 
18:48:04 <ehird> void assert_not_empty(char *s) /*@ proves (strlen(s) > 0) */ 
18:48:10 <AnMaster> also those | are due to this being a "diff from 2001 edition" 
18:48:13 <ehird> that's only useful if you roll your own logic in there though 
18:48:14 <ais523> ehird: ok, that's clever 
18:48:17 <ehird> assert(strlen(s) > 0) 
18:48:20 <ehird> then it works anyway 
18:48:24 <ehird> since assert(x) proves x 
18:48:33 <ais523> would strlen be special-cased in the linter? 
18:48:36 <AnMaster> ehird, the meaning of strlen is built in? 
18:48:41 <ais523> or would it deduce strlen's properties from its source? 
18:48:52 <ehird> well, it'd come with a standard block of definitions 
18:48:56 <ehird> for the c standard library 
18:49:03 <ehird> but you could easily add your own for any function 
18:50:05 <AnMaster> so I think this means posix requires that 
18:50:05 <AnMaster> <left-brace>          { <U007B> LEFT CURLY BRACKET 
18:50:05 <AnMaster> <left-curly-bracket>  { <U007B> LEFT CURLY BRACKET 
18:50:05 <AnMaster> <vertical-line>       | <U007C> VERTICAL LINE 
18:50:05 <AnMaster> <right-brace>         } <U007D> RIGHT CURLY BRACKET 
18:50:05 <AnMaster> <right-curly-bracket> } <U007D> RIGHT CURLY BRACKET 
18:50:11 <AnMaster> several names for the same symbol? 
18:50:17 <ehird> ais523: essentially, this system would be an extensible system for writing code checkers 
18:50:22 <ehird> from inside the actual code 
18:50:33 <ehird> with a large base checker built in 
18:50:57 <ehird> i can forsee, e.g., people offering checker files for all sorts of libraries 
18:51:04 <AnMaster> ais523, yes POSIX.1-2008 at least requires {} 
18:51:06 <ehird> and you just import them and off you go, compile-time verification 
18:51:51 <ehird> i think what i'm saying here, is that i am crazy, and awesome 
18:52:34 <AnMaster> ehird, somewhere in between I think 
18:52:51 <ais523> ehird: yep, pretty much what I was thinking too 
18:52:59 <ais523> does it track memory allocation the same way? 
18:53:13 <ehird> AnMaster: no, void assert_awesome(Person *person) /*@ need (is_crazy(person)); proves (is_awesome(person)) */ 
18:53:48 <ehird> ais523: i'm pretty sure you could write that to be non-core 
18:53:57 <ehird> you'd need to put a property on (*x) 
18:54:04 <ehird> need (valid_memory(x)) 
18:54:13 <AnMaster> ehird, I think ais523 meant tracking memory leaks 
18:54:22 <ehird> i'm not sure I get what you mean 
18:54:33 <ais523> yes, memory leaks and use after free 
18:54:41 <ais523> what splint's meant to do but doesn't because the annotations are too general 
18:55:00 <ehird> use after free is easy 
18:55:11 <ehird> just add that property to (*x) and define free(x) as proves (!valid_memory(x)) 
18:55:12 <AnMaster> what about tracking when allocations go out of scope? 
18:55:34 <ehird> AnMaster: like how 
18:55:38 <AnMaster> ehird, also it need to track when pointers are copied and this one being applied to other copies of that pointer 
18:55:54 <AnMaster> otherwise it wouldn't detect stuff like: 
18:55:55 <ais523> ehird: int* foo (void) {int a = 4; return &a;} 
18:55:56 <ehird> AnMaster: pointers are copied is just variable assignment 
18:55:59 <ehird> and of course it'd track variable assignment 
18:56:02 <ais523> that's an error, you should be able to detect it 
18:56:16 <ehird> AnMaster: yep, that's variable assignment :P 
18:56:22 <ais523> ehird: the problem is tracking what's aliasing what 
18:56:25 <ehird> gcc already warns about that, does it not? 
18:56:50 <AnMaster> so you need to treat that specially 
18:56:58 <ais523> ehird: lots of things do 
18:57:02 <ais523> but that's an obvious case 
18:57:18 <ehird> ais523: right, but you can make gcc make just that an error can't you? 
18:57:22 <ais523> consider {char* a = malloc(20); b = a; free(a);} 
18:57:28 <ehird> i mean, this is really for the sort of non-trivial stuff, like hugely nested frees and such 
18:57:32 <AnMaster> ehird, gcc is far from perfect 
18:57:36 <ehird> ais523: right, it'll notice b is invalid 
18:57:37 <ais523> but it's the same thing, really 
18:57:41 <ehird> because it contains the same pointer as a 
18:57:46 <ehird> and a is no longer valid_memory 
18:57:50 <ehird> so b isn't, obviously 
18:57:51 <AnMaster> ehird, all the sort of memleaks that valgrind can detect 
18:57:54 <ais523> yes, that's the sort of tracking that I was talking about 
18:58:02 <ehird> AnMaster: yes, hopefully 
18:58:05 <ais523> now, suppose you have the C-INTERCAL Threading Structure 
18:58:14 <ais523> how do you detect that memory's being freed exactly once there 
18:58:16 <ehird> ais523: i don't want to suppose that :D 
18:58:26 <AnMaster> ehird, I agree, thought it should try to do that 
18:58:31 <ais523> AnMaster: it's the most complex memory structure I know of offhand 
18:58:40 <ais523> and other interesting stuff 
18:58:42 <AnMaster> ais523, I think runtime checking of it is the only sane way 
18:58:50 <ehird> ais523: remember that it can't just magically infer stuff 
18:58:53 <ehird> if you say a function proves (x) 
18:58:54 <ais523> hmm... for something saner, what about a skiplist? 
18:58:57 <ehird> then it takes your word for it 
18:59:11 <ais523> you should state the proves by hand 
18:59:16 <ais523> but it should verify that it is indeed proven 
18:59:19 <ais523> that's what Splint does 
18:59:23 <AnMaster> ehird, there should be a mode to check what you tell it 
18:59:29 <ehird> that's halting problem impossible 
18:59:33 <ais523> ehird: it's normally possible, though 
18:59:42 <ehird> ais523: it's not even worth it 
18:59:42 <ais523> just because it's halting impossible sometimes doesn't mean you can't do it in the general case 
18:59:57 <ais523> and then, you just make programs where it can't prove compile errors 
18:59:58 <ehird> the amount of functions you declare as proving things is a small amount compared to other types 
19:00:01 <ehird> and you should check them carefully 
19:00:13 <ehird> as, well, if it can't trust validators to validate, it can't do anything, can it? 
19:00:29 <ais523> *it can't /trust/ anything 
19:00:39 <ehird> no, it can trust this: 
19:00:39 <ais523> it can trust + to add, for instance 
19:00:46 <ais523> and the control variable of a while to be 0 when it ends 
19:00:47 <ehird> void assert(int x) 
19:00:52 <ehird> /* error out here... */ 
19:00:58 <ehird> that's one of the rare provers 
19:01:00 <ehird> and it should be effectively foolproof 
19:01:02 <ehird> there's not much room for error there 
19:01:03 <AnMaster> ais523, unless you use while ++ 
19:01:12 <ehird> as a good rule of thumb, if you can't look at every line and certify that it works correctly 
19:01:13 <ais523> ehird: it can easily deduce that that proves, though 
19:01:14 <ehird> don't make it a prover :P 
19:01:23 <ais523> you don't need to take the programmer on trust 
19:01:27 <ehird> ais523: really, it's best to use discretion when defining provers. 
19:01:32 <ehird> just don't, in general 
19:01:33 <AnMaster> ais523: while (str[i] != 0) { ... } 
19:01:34 <ais523> you know exit (or what ever you use) errors out permanently 
19:01:35 <ehird> use assert(), or whatever 
19:01:37 <ehird> make a primitive prover 
19:01:38 <ais523> so the function never ends unless x is true 
19:01:40 <ehird> and get its assurance 
19:01:41 <ais523> so it does in fact prove 
19:01:42 <AnMaster> ais523: while (str[i++] != 0) { ... } 
19:01:51 <ehird> because that will work much better 
19:01:55 <ehird> and it will edtect when it doesn't really prove it 
19:02:00 <ehird> beacuse it uses an asserted-prover incorrectly 
19:02:13 <ehird> that's the thing, provers should be rare and very carefully written and small 
19:02:20 <ehird> everything else can be inferred on top of them 
19:02:24 <ais523> ehird: what I'm saying is there should be /no provers/ under your definition 
19:02:30 <ehird> ais523: yes, but that's shaky 
19:02:32 <ais523> not just rare and carefully written and small 
19:02:35 <ehird> and you could slip up 
19:02:38 <ais523> you can infer everything from the lang itself 
19:02:45 <ehird> because it's the fucking halting problem 
19:03:04 <ais523> look at your assert above, for instance 
19:03:08 <ehird> anyway, you CAN'T even inferr it, ais523 
19:03:17 <ais523> it's very easily to statically prove that x is true if it ever reaches the end of the function 
19:03:18 <ehird> it could print out to the screen 
19:03:20 <ehird> it could set a toaster off 
19:03:22 <ais523> and I'm assuming something like an abort here 
19:03:23 <ehird> it could eat loads of memory on purpose 
19:03:25 <ehird> it could play pacman 
19:03:27 <ehird> ais523: aha, assuming 
19:03:31 <ehird> so now you have a new class 
19:03:39 <ehird> and you can't handle errors your own way 
19:03:41 <ais523> ehird: yes, all static analysers use those AFAIK 
19:03:49 <ehird> yes, but they shouldn't 
19:03:55 <ais523> because that method is itself verifiable to abort 
19:04:04 <ais523> if it doesn't abort, then the assert isn't actually proving anything 
19:04:05 <AnMaster> idea: just use haskell, should be way easier to prove 
19:04:05 <ehird> it's far more robust to have a few primitive provers that are carefully checked 
19:04:09 <ehird> and rarely ever declare anything as a prover 
19:04:15 <ais523> ehird: yes, it's called the operators of the language 
19:04:15 <ehird> AnMaster: er, shut up, it's exactly the same for haskell 
19:04:25 <ais523> those are your primitives 
19:04:27 <ehird> ais523: have fun solving the halting problem 
19:04:30 <AnMaster> ehird, excepts the dirty bits are all in monads 
19:04:42 <ehird> AnMaster: stop bullshitting... 
19:04:44 <ais523> ehird: it doesn't need to solve the halting problem, it's a static analyser by definition 
19:04:48 <ais523> it only has to do a finite amount of work 
19:04:59 <AnMaster> ehird, I meant nomads of course 
19:05:01 <ais523> it may not be able to prove everything, but if it can't, that's a warning/error 
19:05:17 <ais523> and the programmer should annotate the program defensively so it can 
19:05:32 <ehird> ais523: if you think you can write a program that takes an arbitrary function and verifies whether it actually "proves" (where you don't know how it will handle success/failure of this proof) an arbitrary piece of code boolean condition 
19:05:41 <ais523> for instance, you can get assert to find a counterexample to the Riemann hypothesis if it finds the assertion is false 
19:05:43 <ehird> even though it may use different ways to say the same value than the prof 
19:05:46 <ehird> then you're a crackpot 
19:05:52 <ehird> and I'm not going to continue talking 
19:05:53 <ais523> then, the static analyser will mark that code as buggy, even though it might not be 
19:05:55 <ehird> if you don't believe that 
19:05:59 <ehird> then provers are a better solution 
19:06:36 <ais523> ehird: I think I can write a program that takes an arbitrary function, and a statement about what it's meant to prove, and either deduce (in the 99% of cases that matter in practice) that it does indeed prove that, or be unable to prove it proves that and errors out 
19:06:55 <ais523> you can't solve the halting problem. But you can write a program in such a way that it can be verified that the program halts 
19:07:06 <ehird> meanwhile i'll spend the extra 5 seconds when writing a program to make sure the provers are correct, after having saved 5 years that it'll take you to write your mythical program 
19:07:22 <AnMaster> ehird, "<ehird> then you're a crackpot" <-- just remember he *did* win the wolfram price 
19:07:25 <ais523> ehird: but then, it's theoretically possible that someone could write a buggy program 
19:07:29 <ais523> AnMaster: yep, I'm a crackpot 
19:07:32 <ehird> AnMaster: Argument to authority also makes you a crackpot. 
19:07:33 <AnMaster> even if he *is* a crackpot as you say, he is a smart one 
19:07:53 <ehird> ais523: there are always buggy programs. 
19:07:57 <ehird> fuck, this checker will have like 500 bugs 
19:08:04 <ehird> the point is mitigation to a reasonable level 
19:08:15 <oklopol> [i for i in [1,2,3,4,5] while i<3] i'm sad this doesn't exist in python 
19:08:15 <ehird> and since provers should be rare, you can mitigate their correctness almost 100% 
19:08:20 <ehird> save things like the stdlib failing 
19:08:24 <AnMaster> ehird, same as the difference between eccentric(sp?) and mad 
19:08:26 <ehird> [i for i in [1,2,3,4,5] if i<3] 
19:08:36 <oklopol> ehird: that's only the same in that case 
19:08:55 <oklopol> i meant, you know [i for i in [1,2,3,4,5,4,3,2,1] while i<3] >>> [1,2] 
19:09:34 <ais523> ehird: the thing is, I don't see why on earth you're saying that your assert needs to be marked as a prover, when it's trivially veifiable 
19:09:43 <ais523> it's much easier to verify than most of the nonprover functions out there 
19:09:55 <ais523> you're saying provers should be trivially verifiable. If it's so trivial, why not verify them automatically? 
19:09:59 <AnMaster> ehird, it should have fewer bugs than qmail 
19:10:01 <ehird> ais523: because assert is a trivial example 
19:10:37 <ehird> and i really don't care what you think is theoretically possible because the difference in the two in practice is neligible except mine invites more careful checking of programs, and takes years less tow rite 
19:10:55 <ehird> AnMaster: isn't qmail very bug-free? 
19:10:56 <ais523> ehird: yours takes longer to write, and checks less of the program 
19:11:06 <ehird> ais523: you're wrong. 
19:11:59 <AnMaster> ehird, there hasn't been a bug for years iirc, and between 1.0 and now there has been less than 10 bugs iirc 
19:12:10 <ais523> ehird: can you give an example of a complicated prover? 
19:12:20 <ehird> Is qmail licensed yet? 
19:12:37 <ehird> ais523: sure -- think about e.g. KDE/Qt 
19:12:38 <AnMaster> ehird, public domain since some time iirc 
19:12:52 <ais523> ehird: what would it be proving? 
19:12:53 <AnMaster> ehird, that would involve proving X first 
19:12:53 <ehird> they almost certainly have bulky assertion functions which do things like report the error to a gui 
19:13:01 <ehird> ais523: who knows? 
19:13:08 <ais523> ehird: yes, but it's trivial to verify that the functions in question exit 
19:13:16 <ehird> exiting is NOT ALWAYS CORRECT 
19:13:17 <AnMaster> ehird, and yet qmail is one of the most used (the most used?) MTAs out there 
19:13:18 <ais523> you don't even have to analyse the whole function for that 
19:13:24 <ehird> it could change the program to bug reporting mode instead 
19:13:27 <ais523> ehird: do they exit the program, or do they continue it? 
19:13:34 <ehird> ais523: continuing COULD BE CORRECT 
19:13:35 <ais523> if they're changing to bug report mode, your assertion is in fact /false/ 
19:13:39 <ais523> you've proved something false in that case 
19:13:45 <ais523> so your prover is actually buggy 
19:13:58 <ehird> you've found that somethign is false, and you're handlnig that 
19:13:59 <AnMaster> ehird, it is theoretically correct 
19:14:01 <ais523> if continuing from an assert when the condition is false is /ever/ correct, it /hasn't proved what it's claiming to prove/ 
19:14:14 <ehird> your definition of prove is completely wrong in the context 
19:14:16 <ais523> a more interesting case is if assert somehow alters the program's state so the condition becomes true 
19:14:25 <ehird> i'm not even talking about it any longer because it's worthless 
19:14:26 <oklopol> seems ehird is one of those people who take the halting problem as the end of topic of proving. 
19:14:35 <ais523> ehird: using your method, assert(x != NULL); putchar(*x); could segfault 
19:14:41 <ehird> ais523: no, it couldn't 
19:14:48 <ehird> it could pop up a bug reporting window 
19:14:51 <ais523> yes it could, if assert ever returned when x was null 
19:14:53 <ehird> which then exit()s in itself 
19:15:03 <ais523> in that case, it's trivial to determine that assert exits 
19:15:03 <ehird> maybe the platform doesn't do exit() 
19:15:05 <ehird> maybe it's embedded 
19:15:09 <AnMaster> oklopol, oh yes, somewhat like a Godwin's law for TC discussions? 
19:15:10 <ehird> maybe it goes into an infinite loop of flashing a warning light 
19:15:25 <ais523> anything but a complicated infiniloop is relatively easy to analyse 
19:15:27 <ehird> you can't fucking say that the program exiting is the only way it can handle a false proof 
19:15:31 <ehird> because that is simply WRONG 
19:15:41 <ais523> ehird: no, the only way it can handle it is /failing to continue past that point/ 
19:15:48 <ais523> there are only two ways to do that, exit and infiniloop 
19:15:59 <ehird> and NEITHER HAS TO HAPPEN IN THE ACTUAL FUNCTION 
19:16:06 <ehird> it could happen in a function in a binary blob that it calls 
19:16:09 <ais523> that's what the static analyser is for! 
19:16:10 <ehird> there's no way to prove THAT works 
19:16:14 <ais523> you analyse the functions it calls 
19:16:21 <oklopol> AnMaster: yes, kinda like tcness is for language discussions 
19:16:22 <AnMaster> ais523, if another thread alters this thread 
19:16:23 <ehird> ais523: except you can't assert that a function in a binary blob exits 
19:16:29 <ehird> because it needs to fucking statically analyze the source for that 
19:16:32 <ehird> beacuse it uses your retarded scheme 
19:16:33 <ais523> ehird: well, those do need annotations as primitives 
19:16:40 <ais523> but then, you're just taking the programmer on trust 
19:16:41 <AnMaster> ais523, this gets hugely complicated if you use phtreads 
19:16:42 <ehird> so now you have proves as an annotation 
19:17:09 <ais523> ehird: yes, but you have to realise that you're sacrificing guaranteed correctness in that situation 
19:17:17 <AnMaster> ais523, I'm uncertain you could prove anything in fact if the program was threaded 
19:17:18 <ais523> in fact, trusting binary blobs to do anything particular at all is a bad idea 
19:17:22 <ais523> if you want to make sure your program is gine 
19:17:32 <ehird> arguing with you is so pointless, you just continually reassert that you're right immediately after admitting you're wrong 
19:17:33 <ais523> AnMaster: you can, you just need to make assertions about how the threads affect each other 
19:17:34 <AnMaster> ais523, also I would love to see what splint did on #pragma omp 
19:17:50 <AnMaster> ais523, #pragma omp is OpenMP btw 
19:17:56 <ais523> much the same way as you annotate how you affect global variables in SPlint 
19:17:57 <oklopol> i didn't really read much of this, anyone feel like quickly explaining what the argument is about? 
19:18:16 <AnMaster> oklopol, writing a static analyzer for a C like language that could verify the program 
19:18:17 <ais523> oklopol: ehird's arguing that a static analyser should take the programmer on trust for things rather than verifying them itself 
19:18:27 <ehird> that's not what i fucking said 
19:18:35 <oklopol> ais523: that's what i thought he meant 
19:18:37 <ais523> I'm arguing that a static analyser should in all cases possible determine things for itself 
19:18:53 <GregorR> AnMaster: I'm popping some! 
19:18:55 <ais523> please give an example of how that isn't your viewpoint 
19:18:58 <oklopol> AnMaster: not yet, i want context before i start watching :P 
19:19:10 <ehird> that's true IFF every function in every program is a prover. 
19:19:16 <ehird> whereas barely any are. 
19:19:16 <GregorR> AnMaster: I'm watching a cat fight :P 
19:19:21 <ehird> and furthermore, this is tiring. goodbye. 
19:19:22 -!- ehird has left (?). 
19:19:28 <ais523> ehird: there is no difference between provers and nonprovers 
19:19:33 <ais523> oklopol: an idea invented by ehird 
19:19:47 <ais523> basically it's a function that the programmer asserts does something 
19:19:54 <oklopol> special functions that can assert things the compiler then takes on trues? 
19:20:01 <ais523> and the static analyser takes the programmer at their word 
19:20:02 <ais523> rather than checking that it actually does that 
19:20:04 <oklopol> ais523: right. that's an assert 
19:20:12 <ais523> yes, assert was the example we were mostly using 
19:20:17 <oklopol> it's just an assert that doesn't actually fail. 
19:20:33 <ais523> I was arguing that it's better and more robust to get the compiler to look in the source of assert to make sure it actually does what it's supposed to dp 
19:20:52 <AnMaster> ais523, well for assert() that is simple 
19:20:57 <ais523> after all, ehird's idea was that provers should be so simple that they can be checked by hand to unambiguously make sure they always work 
19:21:12 <ais523> no need to argue this point with me, I'm on the same side as you I think 
19:21:22 <AnMaster> /usr/include/gentoo-multilib/amd64/assert.h:extern void __assert (const char *__assertion, const char *__file, int __line) 
19:21:26 <ais523> well, if provers are so simple, just analyse them yourself like the rest of things 
19:21:30 <oklopol> ais523: and what would their point be? 
19:21:44 <ais523> oklopol: ehird had to resort to things like binary blobs which couldn't be statically checked 
19:21:49 <ais523> or mentioining the halting problem 
19:21:50 <oklopol> that the programmers would more easily believe the programmer is correct? 
19:21:51 <AnMaster>    : __assert_fail (__STRING(expr), __FILE__, __LINE__, __ASSERT_FUNCTION)) 
19:22:05 <oklopol> i mean, that's what modularity and asserts are for 
19:22:20 <oklopol> and that whole idea is equivalent to the assert statement found in all languages 
19:22:25 <AnMaster> ais523, can you prove it? I think it ends up calling a compiler built in 
19:22:25 <ais523> oklopol: ehird thought it was impractical/impossible to verify that all provers worked statically 
19:22:39 <ais523> AnMaster: you need to know what compiler builtins do to be able to analyse them, ofc 
19:22:45 <oklopol> except in a round-about fashion that i don't really see a use for. 
19:22:47 <ais523> there is a bottom level of provers as ehird calls them, obviously 
19:22:56 <ais523> but they shouldn't be programmer-written functions 
19:23:02 <AnMaster> ais523, a few standard C ones? 
19:23:08 <ais523> they should be the primitives of the language, the operators, commands, functions and builtins 
19:23:15 <ais523> you can either do it on libc 
19:23:19 <ais523> or just look in the source of libc 
19:23:34 <ais523> for instance, you can run through the source of newlib and determine that assert doesn't always assert 
19:23:40 <AnMaster> ais523, gcc uses builtins for lots of things 
19:23:43 <ais523> because it raises a SIGABRT, which might be masked 
19:23:49 <oklopol> ais523: you could do that when proving something trivial that's hard to prove in the language of the prover 
19:23:52 <ais523> AnMaster: this isn't really relevant... 
19:23:59 <oklopol> assuming you're using a system where you can help the prover 
19:24:01 <ais523> except I don't see this situation coming up 
19:24:08 <AnMaster> ais523, also I believe assert() raises sigabort on glibc too 
19:24:13 <AnMaster> ais523, since it drops you into gdb 
19:24:15 <ais523> AnMaster: it does on all POSIX systems by default 
19:24:21 <oklopol> ais523: proofs tend to get three times bigger when you get technical 
19:24:25 <ais523> which means it's actually kind-of useless for asserting 
19:24:49 <oklopol> i'm assuming there would be automatic proving too? 
19:24:52 <ais523> maybe that's why Splint was complaining about my asserts! 
19:24:56 <ais523> oklopol: yes, that's the whole point 
19:25:02 <AnMaster> ais523, unless you prove SIGABRT isn't masked 
19:25:03 <oklopol> yeah, that's why i assumed it 
19:25:07 <ais523> AnMaster: ah, yes, ofc 
19:25:13 <ais523> Splint isn't that sophisticated 
19:25:17 <ais523> a good static analyser would be though 
19:25:18 <oklopol> well i agree with ehird, that would be helpful 
19:25:28 <AnMaster> ais523, you could see if there is any call to signal() or sigaction() involving sigabrt 
19:25:31 <oklopol> although probably for a different reason than him 
19:25:37 <AnMaster> for example cfunge only masks sigpipe 
19:25:40 <ais523> oklopol: what in particualr are you agreeing with? 
19:25:41 <oklopol> i'm thinking it would be useful for the trivial things, not the complicated ones. 
19:25:49 <oklopol> ais523: that they would be useful 
19:26:05 <oklopol> that you could tell the prover about a high-level idea 
19:26:05 <ais523> oklopol: what sort of trivial things are you thinking of which couldn't just be static-analysed like the rest of the code? 
19:26:09 <AnMaster> ais523, what would you do if the program used alarm() then everything is suddenly a timing issue 
19:26:23 <ais523> AnMaster: bail out if you couldn't prove for certain that it worked 
19:26:39 <AnMaster> ais523, well cfunge uses alarm() in fuzz testing builds 
19:26:41 <oklopol> ais523: probably something that's intuitively clear, but the prover just happens not to get right, and you don't feel like explaining it to it 
19:26:45 <ais523> I mean, you could write a program where on a failed assert it searched for a counterexample to the Riemann Hypothesis, then kept on going 
19:26:48 <AnMaster> ais523, to run for a limited time 
19:26:56 <ais523> oklopol: I'd call that a bug in the linter 
19:27:17 <ais523> that's the sort of example that the linter couldn't prove correct 
19:27:25 <ais523> but people don't do that in practice, and IMO shouldn't use it in maintainable code 
19:27:31 <AnMaster> ais523, also you do need to trust the compiler to not have bugs in code generation 
19:27:49 <ais523> the idea is to avoid bugs in the original source code 
19:28:01 <ais523> bugs in the linter or in the compiler can still cause buggy output, of course 
19:28:01 <AnMaster> ais523, and you couldn't just run it on the compiler to see if it found issues 
19:28:04 <oklopol> ais523: i'm not saying there's any use with a good prover 
19:28:14 <oklopol> i just don't know how good provers are. 
19:28:17 <AnMaster> 1) You could have a buggy build of the linter 
19:28:28 <AnMaster> 2) you could have logic bugs causing such issues in the compiler 
19:28:38 <ais523> oklopol: not very good atm, but the whole idea was a project to build a good one 
19:28:58 <ais523> and we got sidetracked over the issue of where the primitives should be 
19:29:10 <AnMaster> ais523, well you got any idea how? 
19:29:10 <oklopol> i mean some intuitively clear graph algorithms, even something as simple as dijkstra, aren't trivial to prove 
19:29:25 <oklopol> well dijkstra is trivial to prove for a human, but an actual proof is pretty long 
19:29:48 <AnMaster> oklopol, that things are harmful? 
19:29:53 <ais523> oklopol: proving that it works, you mean? 
19:29:54 <AnMaster> what has that got to do with it 
19:30:11 <ais523> my vision is that you'd include a proof that it always returns the best answer 
19:30:16 <oklopol> you might want to, even if your prover can't prove that part, to be sure about the parts it can prove 
19:30:17 <ais523> a machine-readable one, in C 
19:30:31 <ais523> and yes, a proves_unsafe pragma would be helpful during development 
19:30:43 <ais523> but if I'm using such a superlinter as this, I wouldn't want any in a production build 
19:30:48 <oklopol> ais523: yes, that's better, i'm just saying you might want to be able to skip some of the proof, for instance to be able to try it out 
19:30:52 <ais523> (or, you could just do expected-error instead) 
19:30:54 <AnMaster> ais523, also there will be programs where it would be useful to prove parts of the code even if you can never prove it all 
19:31:11 <oklopol> assuming you couldn't compile a program that hasn't been proven to be correct or something 
19:31:18 <AnMaster> ais523, for example you can't prove X ever since it depends hugely on agp card bugs 
19:31:49 -!- oerjan has quit ("Bus"). 
19:31:50 <oklopol> but yes, of course, in the end, the proof should be given to the prover as steps in whatever system it uses for deduction itsel 
19:32:25 <AnMaster> ais523, if you can write this linter it would rock 
19:32:28 <oklopol> and i think ehird fails to realize most of the "intuitively clear" things you'd end up telling the prover like by trust, are exactly things that are trivial to prove in its own language 
19:32:33 <AnMaster> but I certainly know I couldn't help you 
19:32:37 <ais523> oklopol: that was my main point 
19:32:46 <ais523> anyway, it seems assert crashes the program even if SIGABRT is masked 
19:32:55 <ais523> according to man assert, it unmasks SIGABRT first 
19:33:23 <AnMaster>        If the SIGABRT signal is ignored, or caught by a handler that returns, the abort() function will still terminate the process.  It  does 
19:33:24 <AnMaster>        this by restoring the default disposition for SIGABRT and then raising the signal for a second time. 
19:33:24 <ais523> you can longjmp out of a signal handler 
19:33:50 <ais523> if you don't longjmp out, though, it ensures that the code nevertheless terminates 
19:34:04 <ais523> now, this is the sort of thing it would be great to have an automatic verifier for 
19:34:12 <ais523> assert isn't nearly as simple as I thought it was 
19:34:26 <AnMaster> ais523, one issue, consider the infiniloop way of exiting you mentioned 
19:34:26 <oklopol> ais523: well, i agreed with you all along, but i still also agree with ehird's idea's possible usefulness, although for just getting the prover to skip some unproven part for now. 
19:34:30 <ais523> and really I wasn't confident that assert(0) always exits, but I am now 
19:34:33 <AnMaster> ais523, what if there are other threads 
19:34:43 <AnMaster> and they modify the first threads program memory 
19:34:45 <ais523> AnMaster: they'd need pointers into the program to change stuff in it 
19:34:54 <AnMaster> ais523, sure, what about proving a jit compiler! 
19:35:03 <ais523> heh, that would be fun 
19:35:13 <ais523> we can certainly prove that it jumps into memory it's just modified 
19:35:18 <ais523> but not really what's happened from there 
19:35:27 <ais523> but at least we'd know there was something we couldn't handle 
19:35:30 <AnMaster> ais523, and if it is multi-threaded 
19:35:36 <ais523> multithreading isn't so bad 
19:35:45 <ais523> as you can analyse which threads can access what in which other threads 
19:35:56 <ais523> but still the variable execution times between the threads is still a pain 
19:35:58 <AnMaster> ais523, if you believe the valgrind docs: they are 
19:36:11 <AnMaster> apart from condition variables 
19:36:17 <ais523> that's an issue for the wider linter though, not for the recent me/ehird argument 
19:36:34 <ais523> AnMaster: by the way, you have a tendency of focusing on points on the wrong level during these debates 
19:36:51 <oklopol> yes, i actually was about to point that out too 
19:36:55 <ais523> it gets annoying sometimes when you're focusing on a corner case that isn't part of the main debate, for instance 
19:37:04 <ais523> and not even the program we're originally planning to write 
19:37:06 -!- ehird has joined. 
19:37:20 <oklopol> but i'm assuming that's at least partly on purpose 
19:37:41 <ehird> 11:32:25 <AnMaster> ais523, if you can write this linter it would rock  <-- I see i'm getting all the credit for, you know, actually formulating this thing. 
19:37:50 <ais523> ehird: you weren't in-channel 
19:37:56 <ais523> and we both had similar ideas for it independently 
19:38:05 <ehird> interesting, I cease to exist when I leave. 
19:38:06 -!- ehird has left (?). 
19:38:27 <AnMaster> oklopol, wrong, you should have said "who was who?" 
19:38:38 * oklopol is pretty sure ehird is getting younger as time goes by :D 
19:39:19 <oklopol> AnMaster: a guy i once knew 
19:39:50 <ais523> AnMaster: you can drop the joke now 
19:40:02 <oklopol> ais523: stop being an ehird :D 
19:41:32 <AnMaster> ais523, the prover the way you plan it sounds cool, but I think there needs to be some kind of override mechanism when the program can't prove something but a human can verify easily 
19:41:43 <AnMaster> I don't know what it would look like 
19:41:50 <ais523> expected warnings, I think, just like in every other linter ever 
19:41:59 <ais523> you tell it "don't complain about this, I know you think it's wrong" 
19:42:28 <AnMaster> ais523, unless this means it doesn't know if other memory is invalid any more 
19:42:56 <ais523> AnMaster: well, my idea is pretty similar to ehird's, in that you can tell it "this function is meant to prove that strlen(x) >= 5", for instance 
19:43:04 <AnMaster> ais523, just consider for example that memory pool system I wrote, I was unable to express with valgrind annotations if the memory was valid or not 
19:43:06 <ais523> if it can't prove that, that's a warning 
19:43:10 <ais523> but it can assume it elsewhere 
19:43:20 <ais523> and I didn't even know there was such a thing as valgrind annotations 
19:43:23 <AnMaster> ais523, due to it being used internally in the allocator as a linked list of blocks after freeing 
19:43:45 <AnMaster> so memory was legally accessed as something else after the allocator_free() call 
19:43:53 <oklopol> ais523: so like an assert? 
19:43:56 <AnMaster> basically all memory blocks were like this: 
19:43:57 <ais523> AnMaster: ah, you weren't using malloc/free? 
19:44:01 <ais523> oklopol: yes, pretty much 
19:44:09 <ais523> in fact, just adding assert statements would be a good solution to that 
19:44:16 <oklopol> i mean isn't it exactly that, except that you don't specify what happens when the expression is false 
19:44:28 <AnMaster> ais523, union memblock { union memblock *nextfree; struct datatype; } 
19:44:42 <oklopol> because you except it to be true even more than with an assert, in a way. 
19:44:44 <AnMaster> ais523, it allocated from a pool and returned to a free list 
19:44:44 <ais523> in actual code, that is a good place to put an actual assert statement though 
19:44:52 <AnMaster> ais523,  single linked free list 
19:45:01 <ais523> I generally don't put in assert statements if I ever expect them to be triggered 
19:45:08 <ais523> if an assertion is false, it's a bug in the program 
19:45:12 <ais523> and you can NDEBUG them out anyway 
19:45:18 <AnMaster> ais523, thus the memory is to be considered "inaccessible" outside the allocator functions but "accessible" inside it 
19:45:47 <ais523> oklopol: #define NDEBUG turns off all the assert statements in the program 
19:45:57 <ais523> and other assert-like code is normally conditioned on NDEBUG by hand 
19:46:05 <oklopol> i thought you meant you can autoprove them out :D 
19:46:12 -!- ehird has joined. 
19:46:24 <ais523> oklopol: that would be good, warning if you can't prove an assert statement always has a true assertion 
19:46:39 <AnMaster> ais523, so could you handle that memory accessibility definition? even valgrind can't 
19:46:43 <ais523> that's a different kind of proving, it's "proving this program won't abort out with an assertion" rather than "proving this program won't work" 
19:46:47 <ehird> 11:42:56 <ais523> AnMaster: well, my idea is pretty similar to ehird's, in that you can tell it "this function is meant to prove that strlen(x) >= 5", for instance 
19:46:51 <ehird> you win the completely missing the point award 
19:46:55 <ehird> void atleast5(char *s) { assert(strlen(s) >= 5); } 
19:47:01 <ehird> but assert itself has to be tagged proves 
19:47:03 <ehird> because it's a primitive 
19:47:13 <ais523> ehird: my argument is you're putting the primitives on the wrong level 
19:47:23 <ais523> for instance, does assert always exit? 
19:47:23 <ehird> yes, you're wrong though. 
19:47:30 <ehird> that is irrelevant. 
19:47:34 <ais523> no, it definitely isn't 
19:47:44 -!- ehird has left (?). 
19:47:45 <ais523> I don't know all the details of the system library 
19:47:46 <ais523> I had to look it up just now 
19:48:12 <AnMaster> to me it sounds highly relevant 
19:48:17 <ais523> because ehird wants the programmer to arbitrarily declare it irrelevant 
19:48:30 <ais523> I'm arguing that they shouldn't have to, and that way is likely to lead to buggier code 
19:48:37 <ais523> as it's definitely relevant in the bigger scheme of things 
19:50:03 -!- ehird has joined. 
19:50:18 <oklopol> ais523: hmm. i think you'd need two different asserts, ones that specify what you want it to do, ones that specify what you know it does 
19:50:48 <ehird> readers are advised to not trust any results of ais523's mind-reading ability, as it has never been shown to be correct. 
19:50:49 -!- ehird has left (?). 
19:51:02 <ais523> hmm... joining, making a few comments than parting before anyone can reply 
19:51:08 <ais523> wasn't someone doing that yesterday? 
19:51:14 <oklopol> well you can reply, he's just making a statement 
19:51:28 <ais523> and also reading the logs, clearly 
19:51:31 <oklopol> but yeah, i get your reference 
19:51:34 <ais523> which rather misses the point of parting the channel 
19:51:54 <ais523> as for your two asserts thing, I'm not quite sure I know what you mean 
19:52:13 <oklopol> ones that say "this is true, assume it in your proofs" 
19:52:21 <oklopol> and ones that say "this must be true" 
19:52:29 <ais523> well, assert() is the second sort 
19:52:40 <oklopol> i mean, you have to have some way to tell the program what you want it to do, obviously 
19:52:42 <ais523> because it bails out if the statement is in fact false, thus forcing it true if the program continues 
19:53:07 <ais523> the first sort is what ehird wanted all primitives to be 
19:53:15 <ais523> and the question is: what to do if it is in fact false? 
19:53:20 -!- decipher has quit (kornbluth.freenode.net irc.freenode.net). 
19:53:20 -!- rodgort has quit (kornbluth.freenode.net irc.freenode.net). 
19:53:21 -!- psygnisfive has quit (kornbluth.freenode.net irc.freenode.net). 
19:53:23 -!- Dewi has quit (kornbluth.freenode.net irc.freenode.net). 
19:53:23 -!- flexo has quit (kornbluth.freenode.net irc.freenode.net). 
19:53:25 -!- Badger has quit (kornbluth.freenode.net irc.freenode.net). 
19:53:25 -!- AnMaster has quit (kornbluth.freenode.net irc.freenode.net). 
19:53:26 -!- Slereah2 has quit (kornbluth.freenode.net irc.freenode.net). 
19:53:26 -!- Vendan has quit (kornbluth.freenode.net irc.freenode.net). 
19:53:26 -!- Asztal has quit (kornbluth.freenode.net irc.freenode.net). 
19:53:26 -!- sebbu2 has quit (kornbluth.freenode.net irc.freenode.net). 
19:53:28 -!- GregorR has quit (kornbluth.freenode.net irc.freenode.net). 
19:53:30 -!- lament has quit (kornbluth.freenode.net irc.freenode.net). 
19:53:31 -!- mtve has quit (kornbluth.freenode.net irc.freenode.net). 
19:53:31 -!- SimonRC has quit (kornbluth.freenode.net irc.freenode.net). 
19:53:33 <ais523> if that's a programmer bug if it's false, you may as well use the second sort of assert 
19:53:33 <oklopol> but the first one would be for skipping proofs of trivialities you don't feel like translating into the language of the prover, the thing you call ehird's idea, even though i guess he says it's not 
19:53:39 <ais523> as otherwise you're just going to have a mysterious crash later on 
19:54:13 * ais523 points and laughs at christel 
19:54:33 <ais523> although it's not all that bad a netsplit 
19:54:49 <oklopol> ais523: well this is what you and ehird were arguing about (i think), i just just now realized they are both asserts, in a way, just different 
19:54:50 <ais523> oklopol: well, the whole point is that the prover language == the language you're writing in 
19:55:06 -!- Slereah2 has joined. 
19:55:06 -!- Vendan has joined. 
19:55:06 -!- psygnisfive has joined. 
19:55:06 -!- decipher has joined. 
19:55:06 -!- rodgort has joined. 
19:55:06 -!- GregorR has joined. 
19:55:06 -!- Dewi has joined. 
19:55:06 -!- flexo has joined. 
19:55:06 -!- Badger has joined. 
19:55:06 -!- AnMaster has joined. 
19:55:06 -!- Asztal has joined. 
19:55:06 -!- sebbu2 has joined. 
19:55:06 -!- SimonRC has joined. 
19:55:06 -!- lament has joined. 
19:55:06 -!- mtve has joined. 
19:55:09 <ais523> thus there's no need to translate, unless you have a triviality that can't easily be asserted in C 
19:55:10 <oklopol> lol that changes everything 
19:55:28 <oklopol> then of course just the second kind is needed 
19:55:33 <oklopol> and ehird's idea has nothing to do with it 
19:56:10 <oklopol> also the netsplit report came after everyone had already rejoined 
19:57:55 <oklopol> actually of course it doesn't make ehird's idea irrelevant, i somewhat misunderstood 
19:58:10 <ais523> no, it doesn't; I just think ehird's putting the primitives at the wrong level 
19:58:17 <ais523> it's a minor argument really which blew up somehow 
19:58:32 <oklopol> well if he thinks all proofs should have primitives with the programmer asserting something 
19:58:46 <oklopol> then he if obviously wrong 
19:59:21 <ais523> I agree with the idea of only using a few well-checked primitives; but I think they should be the language's primitives themselves, not some layer the programmer puts on top of things 
19:59:43 <ais523> AnMaster: what do you think of bfrle.c, by the way? It's a BF interp designed specifically to debug gcc-bf 
19:59:46 <oklopol> ais523: well those are really two different ideas 
20:00:15 <ais523> they are different ideas, but I think they should be the same operators/commands/functions/whatever to reduce the chance of error 
20:00:20 <ais523> AnMaster: http://rafb.net/p/sRPjBK56.html 
20:00:32 <ais523> same one as before, just a different context for linking 
20:00:44 <ais523> it's not quite ESO-standard brainfuck 
20:00:56 <ais523> partly because ESO still hasn't started, and partly because it gives special meanings to % and * 
20:01:09 <ais523> * because run-length-encoded BF is so much shorter 
20:01:15 <ais523> +*6 is equivalent to ++++++ 
20:01:26 <ais523> and % followed by a number means "assert the pointer is here" 
20:01:36 <ais523> so %80 means that the pointer should be on the 80th cell 
20:01:43 <ais523> not sure offhand if it's 0-based or 1-based 
20:01:52 <ais523> oklopol: to prevent mysterious crashes later 
20:02:06 <ais523> if the pointer isn't where it thinks it is, it's basically UB 
20:02:09 <ais523> which makes it hard to debug 
20:02:39 <ais523> the pointer not being where it thinks it is means there's a bug somewhere, at that point it dumps tape so I can debug what caused it 
20:03:01 <AnMaster> ais523, what about proving for programs like cfunge, what could you prove about it? 
20:03:09 <ais523> AnMaster: you could prove the state of globals 
20:03:16 <ais523> and that you neve read past the null terminator of a string 
20:03:24 <ais523> and that you didn't overflow any buffers 
20:03:36 <AnMaster> ais523, the former totally depends on what the befunge program does 
20:03:42 <ais523> AnMaster: not all globals 
20:03:50 <AnMaster> ais523, true, a few are set at load time 
20:03:56 <ais523> but I mean, you could prove that whenever you tried to read the fungespace it had been allocated 
20:04:01 <AnMaster> ais523, however I had them overwritten once 
20:04:22 <AnMaster> a static array overflowed a lot and wrote in another static variable 
20:04:23 <ais523> well, ideally a linter would detect that your program could potentially overwrite the wrong global 
20:04:38 <ais523> or something as simple as accessing element -1 of an array 
20:04:44 <AnMaster> only with mudflap did I detect it 
20:04:47 <ais523> hmm... this might be a good time to use some of the stranger features of C pointers 
20:05:01 <AnMaster> ais523, also it was a hard to prove case 
20:05:02 <ais523> for instance, if a is an array then even calculating a-1 is UB 
20:05:13 <AnMaster> ais523, and it was after, not before 
20:05:18 <ais523> AnMaster: well, I'm not really going for practicality here, but for idealism 
20:05:44 <AnMaster> they are sure to mess up proving 
20:05:45 <ais523> AnMaster: that's much the same as malloc 
20:05:59 <AnMaster> ais523, I *do* use flexible array members 
20:06:01 <ais523> VLAs are slightly easier to lint than the equivalent malloc/free pair 
20:06:07 <ais523> because you know they aren't there when they go out of scope 
20:06:17 <AnMaster> as in struct with a variable size last element 
20:06:21 <oklopol> ais523: okay yeah i see how it's useful 
20:06:28 <AnMaster> ais523, and which is resized in chunks 
20:06:35 <oklopol> i haven't been thinking much today 
20:06:46 <AnMaster> and only shrunk if the difference is too large 
20:06:51 <ais523> AnMaster: well, it could prove that the allocated size was always equal to the size the struct said it was 
20:07:04 <ais523> anyway, I have to go home, it's been an interesting conversation but I have to have dinner sometime 
20:07:06 <AnMaster> ais523, it isn't because of the flexible struct member... 
20:07:18 <ais523> AnMaster: I was giving an example of what a linter could prove 
20:07:35 <AnMaster> ais523, so how would you be able to track what flexible struct member indexes are valid 
20:07:42 -!- ais523 has quit (Client Quit). 
20:07:59 <oklopol> dang. i was just about to need him. 
20:08:17 <AnMaster> also the reason I use flexible struct members instead of a linked list is cache locality (ehird will love that) 
20:08:37 <oklopol> what are flexible struct members? 
20:08:53 -!- Corun has joined. 
20:08:59 <AnMaster> oklopol, you know what struct mystruct { int foo; int bar }; is? 
20:09:14 <AnMaster> oklopol, struct mystruct { int foo; int bar; int someints[] }; 
20:09:28 <AnMaster> oklopol, it allows the last member to be variable size 
20:09:30 <oklopol> you specify at allocation? 
20:09:38 <oklopol> well yeah, makes sense they'd allow that 
20:09:44 <AnMaster> oklopol, malloc(sizeof(mystruct) + whatever) 
20:10:07 <AnMaster> and then you can access it as mystructvariable->someints[4] 
20:10:20 <AnMaster> oklopol, I don't know, don't think it is legal 
20:10:24 <oklopol> AnMaster: well you could just do someints[0] and have that same behavior. 
20:10:35 <AnMaster> oklopol, err 0 isn't valid there 
20:11:00 <oklopol> i thought they allowed it at some point, but may have been c++, or just my imag 
20:11:03 <AnMaster> oklopol, some compilers might complain that is out of valid range 
20:11:42 <oklopol> they *should* allow that for locals 
20:12:16 <oklopol> i mean how hard is it to compute how much to move the stack pointer at runtime 
20:12:36 <oklopol> AnMaster: that you could do mystruct x WITHLASTSIZE 100; 
20:12:38 <AnMaster> 16 As a special case, the last element of a structure with more than one named member may 
20:12:38 <AnMaster>    have an incomplete array type; this is called a flexible array member. In most situations, 
20:12:38 <AnMaster>    the flexible array member is ignored. In particular, the size of the structure is as if the 
20:12:38 <AnMaster>    flexible array member were omitted except that it may have more trailing padding than the omission would imply. 
20:12:47 <oklopol> WITHLASTSIZE being a keyword 
20:13:05 <AnMaster> oklopol, GCC extension: alloca 
20:13:18 <AnMaster> oklopol, also there is variable size array 
20:13:23 <AnMaster> which is variable sized array on stack 
20:13:41 -!- MizardX has joined. 
20:13:51 <AnMaster> int foo(int x) { int array[x]; } 
20:14:13 <AnMaster> oklopol, also I prefer to avoid that, larger risk for stack overflow 
20:14:22 <AnMaster> and most automated tools can't protect that 
20:14:29 <AnMaster> like stack smashing protection 
20:14:37 <oklopol> well us real programmers don't use tools : D 
20:15:03 <AnMaster> oklopol, stack smash protection means that the compiler inserts special values on the stack and verify them on return 
20:17:02 <AnMaster> EXAMPLE         After the declaration: 
20:17:02 <AnMaster>           struct s { int n; double d[]; }; 
20:17:02 <AnMaster> the structure struct s has a flexible array member d. A typical way to use this is: 
20:17:02 <AnMaster>           struct s *p = malloc(sizeof (struct s) + sizeof (double [m])); 
20:17:03 <AnMaster> and assuming that the call to malloc succeeds, the object pointed to by p behaves, for most purposes, as if 
20:17:08 <AnMaster>           struct { int n; double d[m]; } *p; 
20:17:10 <AnMaster> (there are circumstances in which this equivalence is broken; in particular, the offsets of member d might 
20:17:32 <AnMaster> struct s t2 = { 1, { 4.2 }}; // invalid 
20:17:32 <AnMaster> t1.d[0] = 4.2;               // might be undefined behavior 
20:18:11 <AnMaster> The initialization of t2 is invalid (and violates a constraint) because struct s is treated as if it did not 
20:18:11 <AnMaster> contain member d. The assignment to t1.d[0] is probably undefined behavior, but it is possible that 
20:18:11 <AnMaster>          sizeof (struct s) >= offsetof(struct s, d) + sizeof (double) 
20:18:11 <AnMaster> in which case the assignment would be legitimate. Nevertheless, it cannot appear in strictly conforming 
20:18:25 <AnMaster> oklopol, does that answer the issue of such structs on stack? 
20:22:00 -!- moozilla has joined. 
20:24:31 -!- moozilla has quit (Read error: 54 (Connection reset by peer)). 
20:24:33 -!- moozilla has joined. 
20:27:55 <oklopol> AnMaster: well all that was new was you could declare them as locals, and the array was by default empty. 
20:28:06 <oklopol> which i don't consider that relevant a detail 
20:31:49 -!- Corun has quit ("This computer has gone to sleep"). 
20:39:41 -!- metazilla has joined. 
20:39:43 -!- moozilla has quit (Read error: 104 (Connection reset by peer)). 
20:39:51 -!- metazilla has changed nick to moozilla. 
20:42:00 -!- moozilla has quit (Read error: 104 (Connection reset by peer)). 
20:42:03 -!- moozilla has joined. 
20:46:35 -!- Judofyr has quit (Read error: 54 (Connection reset by peer)). 
20:59:33 -!- moozilla has quit (Read error: 104 (Connection reset by peer)). 
21:06:38 -!- CakeProphet has joined. 
21:21:47 -!- Corun has joined. 
21:21:58 -!- ehird has joined. 
22:22:27 -!- Sgeo has joined. 
22:25:58 -!- seveninchbread has joined. 
22:26:03 -!- CakeProphet has quit (Read error: 110 (Connection timed out)). 
22:26:06 -!- seveninchbread has changed nick to CakeProphet. 
22:32:29 -!- oerjan has joined. 
22:36:28 -!- GreaseMonkey has joined. 
22:41:19 -!- Sgeo has quit (Remote closed the connection). 
23:14:17 -!- Corun has quit ("This computer has gone to sleep"). 
23:23:45 -!- psygnisfive has quit ("Leaving...").