--- Log opened Tue Jun 25 00:00:21 2013 |
00:14 | | You're now known as TheWatcher[T-2] |
00:21 | | You're now known as TheWatcher[zZzZ] |
00:24 | | AnnoDomini [abudhabi@Nightstar-bdf5e4f4.adsl.inetia.pl] has quit [Ping timeout: 121 seconds] |
00:38 | | AnnoDomini [abudhabi@Nightstar-cc35cb3c.adsl.inetia.pl] has joined #code |
01:02 | | Syloq [Syloq@NetworkAdministrator.Nightstar.Net] has quit [Operation timed out] |
01:08 | | Syloq [Syloq@NetworkAdministrator.Nightstar.Net] has joined #code |
01:08 | | mode/#code [+o Syloq] by ChanServ |
01:12 | < [R]> | TIL that MS Office thinks that my purposefully added space at the end of my clipboard item was superfluous, and thus by extension not-required. |
01:12 | < [R]> | Of course, that's why MS has, and always will have the most secure OS ever. |
01:53 | < [R]> | TIL. Shampoo expires. |
01:53 | < [R]> | Good fucking thing I'm not fond of eating it. |
01:53 | < McMartin> | Heh |
01:56 | | RichyB [RichyB@D553D1.68E9F7.02BB7C.3AF784] has quit [[NS] Quit: Gone.] |
01:59 | | RichyB [RichyB@D553D1.68E9F7.02BB7C.3AF784] has joined #code |
02:02 | <~Vornicus> | It's actually kind of interesting how much more straightforward some of this code is, now that I'm putting it in actual classes |
02:03 | < [R]> | <ScytheBlade1> also if we're going to yell at MS trying to be smart and in turn being stupid |
02:03 | < [R]> | <ScytheBlade1> When you save a webpage from IE or similar, and it creates the _Files directory with all of the CSS/images? |
02:03 | < [R]> | <ScytheBlade1> If you delete just that folder, it deletes the saved .html too! |
02:03 | <&ToxicFrog> | o.O |
02:07 | < Syka> | wat |
02:09 | < [R]> | My reaction entirely wy |
02:09 | < [R]> | Syka* |
02:10 | < [R]> | http://xiennith.com/wat.html <-- full convo |
02:10 | < Syka> | i love when microsoft is being two steps from actively malicious |
02:11 | < Syka> | [R]: also wat @ saving it as .html |
02:11 | < Syka> | because that doesn't work :P |
02:12 | < [R]> | Ah fuck |
02:12 | < [R]> | I am so tired |
02:12 | < Syka> | it looks like youre talking to yourself in one great big run on sentence as html :P |
02:12 | < [R]> | $ mv wat.html wat.txt |
02:13 | < Syka> | heh |
02:13 | < Syka> | wat moment from a friend from yesterday |
02:13 | < Syka> | he's grading papers |
02:13 | < Syka> | "Anyway, yes. So far, five out of seven sequence diagrams I've graded required that messages travel back in time. |
02:14 | < Syka> | ... and this group managed to misspell /every single/ state in their state diagram aglblgrlgh." |
02:14 | < [R]> | :/ |
02:14 | < Syka> | he's grading bachelors' track students :D |
02:14 | < [R]> | I'd have to see those diagrams to have a "wat moment" |
02:15 | < Syka> | gimme a sec |
02:16 | < Syka> | "This one essentially states the following: First, central planning transmits the customer's order data. Then, a production plan is drafted. Then, the customer places an order. Then, production reports job completion to central planning, and central planning reports it to the customer. Then, the RFID transponder is attached to the raw materials by production. Then, the customer sends the raw ... |
02:16 | < Syka> | ... materials to production. Then, production is informed about order data. Then, the customer receives the completed product. Also, the whole thing is non-deterministic because control flow is about as chaotic as time. I imagine this might become valid after production is relocated to a spacetime fault, but until then... :|" |
02:18 | | Karono [Karono@Nightstar-03f66622.optusnet.com.au] has quit [Connection closed] |
02:18 | < [R]> | I like how there's a step between recieving the order and passing the order's info. Especially since the latter occurs first. |
02:19 | < Syka> | "I also imagine that dealing with this company is absolutely nightmarish, because you need to correctly guess the actions of your future self (and what steps you need to take to lead up to them) if you don't want the universe to be torn apart by a time paradox." |
02:19 | < Syka> | THESE ARE THE MANAGERS OF THE FUTURE |
02:20 | | Karono [Karono@Nightstar-03f66622.optusnet.com.au] has joined #code |
02:43 | <@Namegduf> | I can believe it. |
02:43 | <@Namegduf> | Those people annoyed the hell out of me as a student. |
02:44 | <@Namegduf> | No understanding what you're doing, just ability to create completely nonsense diagrams. |
02:45 | <&ToxicFrog> | Holy shit http://www.gamasutra.com/view/feature/194772/dirty_game_development_tricks.php |
02:45 | <&ToxicFrog> | Scroll down to the one from Jonathan Garrett |
02:47 | <@Namegduf> | Oh wow. |
02:48 | < McMartin> | Ha ha |
02:48 | < McMartin> | pwnt |
02:52 | <&Derakon> | Niiiiice |
02:54 | <&Derakon> | Heh, page 2 has a bit where they run out of memory while trying to play movies, so they transfer a bunch of extant allocated memory to the GPU, clobber the main memory to load the movie, play the movie, then load the stashed data back off the GPU. |
02:55 | < McMartin> | That's *like* a region-based allocator~ |
02:55 | <@Namegduf> | Yeah. |
02:55 | < McMartin> | Also, man |
02:55 | < McMartin> | My algorithms are really rusty |
02:56 | <@Namegduf> | "certification headache" makes me wince because if you're targeting 4 seconds and doing 26 seconds, and would have considered this acceptable if not forced, you're doing something wrong |
02:56 | | * McMartin dug out his copy of CLR the other day, which was entertaining |
02:56 | <@Namegduf> | In this case, I think having way overcomplicated assets necessary for the main menu sounds likely |
02:56 | < McMartin> | Well, no |
02:56 | < McMartin> | It would seem his issue was "didn't load a splash screen absolutely first" |
02:57 | < McMartin> | As I understand it, he wasn't targeting 4 seconds. |
02:57 | < McMartin> | That's what was written down |
02:57 | < McMartin> | But in practice because of hardware speeds he was actually targeting 0.5 seconds. |
02:58 | <&Derakon> | This is why you need a boot loader~ |
02:58 | <&Derakon> | Tiny executable to load the splash screen and start the main loader up. |
02:58 | < McMartin> | Yeah |
02:58 | < McMartin> | And since there's apparently an additional requirement of unskippable splash screens, that really is clearly Where The Real Loading Goes. |
02:59 | <@Namegduf> | Yeah, it's a WTF that they weren't loading while displaying them out of the box, too. |
02:59 | < McMartin> | That said, if I'm in a bad mood: "Yeah, you're doing something wrong, you're trying to run directly off an optical disc" |
02:59 | <@Namegduf> | And wouldn't have done that unless forced. |
02:59 | <@Namegduf> | Does the rest of their game do no background loading? |
02:59 | <@Namegduf> | Is it one of those games which was annoying as hell for not doing so? |
02:59 | < McMartin> | I'm guessing "console port as an afterthought from PC" |
03:00 | < McMartin> | I can think of very, very few AAA-style games that didn't have butt-obvious zoning sequences. |
03:00 | <&Derakon> | As a general rule, I assume that gamedev is doing things as dirt-simple as possible except when forced. |
03:01 | <&Derakon> | Since they have plenty of other stressors on their development process as it is. |
03:01 | <&Derakon> | If you don't need to make it fancy, then you don't make it fancy -- that's basically the thesis of that article. |
03:01 | <@Namegduf> | I don't know if it has a thesis. |
03:01 | <&Derakon> | Implicit thesis. |
03:01 | <&Derakon> | Theme, I guess. |
03:01 | <@Namegduf> | I wouldn't say the moral of the one involving self-exploitation is "be as simple as possible", seeing as they got screwed from being overly simple. |
03:02 | <@Namegduf> | Some of the others seem to be complexity and maintainability problems introduced as workarounds to limitations. |
03:02 | <&Derakon> | Yes, that's what I said. :) |
03:02 | < McMartin> | As a rule, console games are never maintained. |
03:02 | < McMartin> | In theory one has to get it right the first time because one only gets one shot at it. |
03:02 | <@Namegduf> | Not since the 360 and PS3. |
03:02 | < McMartin> | In practice, this means "software never ships ever" |
03:03 | < McMartin> | Yes |
03:03 | < McMartin> | That's comparatively recent. |
03:03 | | Turaiel[Offline] is now known as Turaiel |
03:03 | < McMartin> | Earlier games were also mechanically simpler in terms of what was demanded of them, usually due to intense hardware constraints. |
03:03 | <@Namegduf> | I don't know if I'd call 2005 "recent" in software development. |
03:03 | < McMartin> | Managers are easier when there's nothing to manage. |
03:04 | < McMartin> | The entire span starts around 1977, so yeah, "console developers get to assume they have significant amounts of memory and a hard drive" is pretty new. There's only one generation where you get that. |
03:05 | <@Namegduf> | I think a significant responsiveness or load time improvement for the user counts as "forced", anyways. Nowadays games are expected to either not have loading screens or make them very short, depending on the type of game. |
03:05 | < McMartin> | I guess *technically* the Wii U is out, but the 360 and the PS3 are the current generation. |
03:05 | <@Namegduf> | They are, but eight years remains a long time in technology. |
03:05 | < McMartin> | Namegduf: That... doesn't really match my experience with AAA games |
03:06 | <@Namegduf> | By "nowadays" I mean about 2008 and onwards. |
03:06 | < McMartin> | DX:HR had (unnecessary) ridiculous loading times that were somehow tied to VSync. The Assassin's Creed games were markedly non-seamless with frequent 1-2 second loading screens. Rayman Origins were rarer but more like 5. |
03:06 | < McMartin> | Those are all post-2010. |
03:06 | < McMartin> | MMOs take entire minutes to zone. |
03:07 | < McMartin> | Dark Souls is seamless during play (though not when transitioning between world states) and it stands out for so doing. |
03:07 | <@Namegduf> | Compare 1-2 seconds with typical loading times in earlier years. |
03:08 | <@Namegduf> | That seems to fit as "very short" by comparison. |
03:08 | <@Namegduf> | I never played DX:HR on consoles. |
03:09 | <@Namegduf> | On my PC I don't remember the loading times being too excessive. |
03:10 | <&Derakon> | I remember Okami on the PS2 having long loading times that included a rhythm minigame to keep you occupied, which paid out in a special type of in-game currency. |
03:10 | <&Derakon> | Playing the Wii rerelease, the loading times were much shorter, making that currency harder to come by~ |
03:10 | <@Namegduf> | XD |
03:11 | < [R]> | Oh that's like the Sayamen minigame from one of the DBZ fighters |
03:11 | < [R]> | Except that one actually gives boons. |
03:11 | <@Namegduf> | I also remember reviews continually complaining about games with long load times. |
03:11 | <@Namegduf> | So reducing them seems like a good idea for that reason alone. |
03:12 | <~Vornicus> | I know the PSX development, uh, thingy, they wouldn't license your game if you had a load time longer than like 2 minutes |
03:12 | <&Derakon> | The GTA series was notable for not having zoning loading...but I remember GTA:SA being absolutely horrible when it came to trying out different outfits. |
03:12 | <@Namegduf> | I wonder if people were complaining about how unreasonable that was. |
03:12 | <@Namegduf> | XD |
03:13 | <&Derakon> | I also remember playing Genji on the PS2 and thinking that I had a faulty disk because it took so long to go from black screen to actual content. |
03:13 | <~Vornicus> | GTA:SA had ridiculously long outfit time. |
03:13 | <@Namegduf> | I wonder why we need certification people to get developers to unlazy about load times. They're noticeable and goddamn annoying. |
03:13 | <~Vornicus> | GTA:VC has a zone boundary where there's a load screen; I never had it take more than a few seconds, and this was on the computer where Spelunky ran at half speed. |
03:13 | < McMartin> | Namegduf: This was patched a week after release |
03:13 | <&Derakon> | Namegduf: loading screens don't, as a rule, prevent sales. |
03:13 | < McMartin> | Post-death reset time at launch was forty seconds if VSync was on. |
03:14 | <@Namegduf> | Bizarre. |
03:14 | <@Namegduf> | Derakon: You have data? |
03:14 | <@Namegduf> | Derakon: Because I have to imagine review negativity damages sales and long loading screens create that. |
03:14 | <@Namegduf> | So it'd be surprising if they didn't. |
03:15 | <@Namegduf> | Do reviews always contain a fairly fixed amount of "cons" space so giving them another con doesn't make things worse? It's possible but it'd be surprising. |
03:15 | < [R]> | Namegduf: the PS2 was made. |
03:15 | < [R]> | Err |
03:15 | <&Derakon> | I think that realistically unless the loading times are horribly bad they aren't going to affect peoples' buy/don't-buy decision making. |
03:15 | < [R]> | I actually don't know which of you need that pointed out. |
03:15 | | * [R] is way too tired |
03:17 | <@Namegduf> | If I reverse that: "Loading times are horribly bad iff they affect peoples' buy/don't-buy decision making" then I think quite a lot of games have had horribly bad loading times. |
03:18 | <@Namegduf> | It doesn't have to affect their decision making a lot to be worth some dev time. |
03:18 | <@Namegduf> | More precisely, it has to affect it more than the least significant thing they're currently giving dev time. |
03:18 | <@Namegduf> | That's a low barrier. |
03:23 | | Karono is now known as Karono[afk] |
03:23 | <&ToxicFrog> | All of the games I can think of with really alarmingly long load times actually did pretty well. |
03:23 | <&ToxicFrog> | Front Mission 3, Far Cry, Mass Effect... |
03:24 | < [R]> | OH gods Mass Effect |
03:24 | < [R]> | D: |
03:24 | <&ToxicFrog> | Games with no load times are still, I think, the exception, although games with load times of 10+ seconds seem to be rarer. |
03:24 | < [R]> | LOAD LOAD LOAD game LOAD LOAD LOAD LOAD game LOAD LOAD LOAD game ... oh wait forgot to do something in the last zone ... LOAD LOAD LOAD ... why am I here again? |
03:25 | <@Namegduf> | I think ME's other properties must have made up for it. |
03:25 | < [R]> | Stupid Normandy 2 ship layout. |
03:25 | <@Namegduf> | I forget what they were or why I enjoyed it briefly. |
03:25 | <@Namegduf> | I couldn't go back to it after playing DE:HR, it did cover-based combat so much better. |
03:25 | | Karono[afk] is now known as Karono |
03:26 | <&ToxicFrog> | Well, that's the thing. If a game otherwise has the popularity-nature, load times probably aren't going to kill it. If it doesn't, having no load times is not really going to help. |
03:26 | < [R]> | Rengoku: Toiwer of Purgatory has annoyingly long loading time too. But it was pretty shitty. |
03:26 | <&Derakon> | TF said what I was trying to communicate, only successfully. |
03:26 | <@Namegduf> | It doesn't need to change it's popularity dramatically to be worth a week of dev time. |
03:27 | < [R]> | Descent had amazing loading times. |
03:27 | < [R]> | <3 Descent |
03:27 | <@Namegduf> | *its |
03:27 | <@Namegduf> | Damnit. |
03:27 | <@Namegduf> | I hate it when I do that. |
03:27 | <&Derakon> | Namegduf: uh, yes it does. |
03:28 | <&Derakon> | A week of dev time in a game development project is a major resource commitment. |
03:28 | <&Derakon> | If it doesn't affect sales? It doesn't get done! |
03:28 | <&ToxicFrog> | Namegduf: if that week couldn't otherwise be spent fixing bugs or adding optional features or improving in-game performance or upgrading the AI or polishing the demo or... |
03:28 | <&Derakon> | This is precisely why you hear about so many weird hacks in game development -- they don't have the time to do it properly. |
03:28 | <@Namegduf> | It would affect sales. |
03:28 | <&Derakon> | It demonstrably does not. |
03:28 | <@Namegduf> | Show me your data. |
03:28 | <&ToxicFrog> | You keep asserting this and there is no evidence to back it up. |
03:29 | <&ToxicFrog> | If you have evidence, show us. |
03:29 | <@Namegduf> | Anything affects sales. |
03:29 | <@Namegduf> | I didn't say it affects sales massively. |
03:29 | <@Namegduf> | My main assertion is this weird binary model of sales is incredibly shitty. |
03:29 | <@Namegduf> | The one in "it's either massively popular or it's not, loading times won't change that and so are totally irrelevant" |
03:29 | <&ToxicFrog> | Furthermore, you have to show not only that it affects sales, but that it affects sales more than, say, that intermittent crash bug in the second level would, or running 5fps slower than it should. |
03:30 | <@Namegduf> | It probably doesn't affect sales more than those things. It might affect sales more than making the game shorter by 5 hours would. |
03:30 | <&Derakon> | Loading times are not totally irrelevant, just generally far less relevant than game-breaking bugs or core feature work. |
03:30 | <&Derakon> | And game developers are never short on work to do on game-breaking bugs and core features. |
03:31 | <@Namegduf> | There's plenty of crap outside of core features and game-breaking bugs added. |
03:31 | <@Alek> | KOTOR. |
03:31 | <@Alek> | that had some long loadtimes. |
03:31 | <&ToxicFrog> | If you have a week of dev time to spare and the load times are already "good enough", you would be insane to spend that time improving load times further rather than knocking off a few bugs high on the severity list or squeezing a few extra FPS out of the renderer. |
03:31 | <@Namegduf> | So presumably they have the capability to cut that and spend more time on performance even if they're still leaving game-breaking bugs and core features to the last minute. |
03:34 | <&ToxicFrog> | You keep making this completely unsupported claim that load times significantly affect sales, and two further implicit claims that they affect sales more than other defects you could be spending time on, and that the effect is linear or, at least, significant at all scales. |
03:35 | <@Namegduf> | The last is definitely not my assertion. |
03:35 | <&ToxicFrog> | Well, you certainly seem to be implying that improving load times is always worth it |
03:35 | <@Namegduf> | This conversation started with reference to a tale of someone cutting 26 seconds to 5.5 seconds in startup time at the last minute, and me asking why the certification process had to force them to do it. |
03:36 | <@Namegduf> | (Because that was the reason they were doing it) |
03:36 | <&ToxicFrog> | Going from 10 minutes to load a level to 1 minute? Yeah, that will probably make a big difference. Going from 10 seconds to 1 second? Reviewers won't even mention it and most players won't care, if they even notice. |
03:36 | <@Namegduf> | (And they made reference to seeing it as a silly requirements) |
03:36 | <@Namegduf> | *silly requirement |
03:36 | <&ToxicFrog> | Given that most games take more than 30 seconds to start up and some extremely popular ones take several minutes, yeah, it does seem kind of pointless and arbitrary. |
03:37 | <@Namegduf> | Not on that console, apparently. |
03:37 | <&ToxicFrog> | (and that's just to get to the title screen, not to actually get in game) |
03:37 | <~Vornicus> | Personally, most angst about long load times can be adequately dealt with imo by a progress bar. |
03:37 | <@Namegduf> | I think people would notice 10 seconds to 1 second. It's either "meh" to "very good" or "pissing me off" to "acceptable" depending on the frequency of load screens. |
03:37 | <&Derakon> | Yeah, as long as people have a reasonably accurate estimate of how long they have to wait, they won't usually mind too much. |
03:38 | <@Namegduf> | (Most games which have load screens but have them under a second have them quite often, and 10 second waits at a similar frequency would elicit comments similar to those for ME) |
03:38 | <@Namegduf> | (Which, you may dispute the impact, but was certainly noticed) |
03:40 | <@Alek> | personally, if a game takes more than about 30s to 1m to start, I won't be playing it much. D: |
03:40 | | Kindamoody[zZz] is now known as Kindamoody |
03:41 | <@Alek> | cause I just won't have the time. -_- |
03:41 | <@Namegduf> | PC games tend to take ages to load by comparison to current non-PC games, I thik. |
03:41 | <@Namegduf> | *think |
03:42 | <&Derakon> | Get a solid-state drive~ |
03:42 | <@Namegduf> | At about 10 seconds I get impatient, though. |
03:42 | <@Alek> | well, consoles tend to be optimized for loading games. no? |
03:42 | <@Namegduf> | I do, but I don't keep my games on it. |
03:42 | <@Alek> | and yeah, a SSD with big modern games would work. |
03:42 | <&ToxicFrog> | PC games tend to contain a lot more stuff, don't get to make simplifying assumptions about the hardware they're running on, and don't have certification requirements forcing the developers to spend their time reducing startup time rather than fixing bugs~ |
03:43 | <@Namegduf> | I kind of wish they did have certification requirements, then. |
03:43 | <@Namegduf> | I think we have a "work expands to fill available time" issue here. |
03:43 | <&Derakon> | And who would enforce them? |
03:43 | <@Namegduf> | Steam could. |
03:43 | <@Namegduf> | Windows 8 Store could, too. |
03:43 | <&Derakon> | If Steam tried to have a certification process then nobody would distribute via Steam. |
03:43 | <@Alek> | quite. |
03:43 | <@Namegduf> | Hah. |
03:43 | <@Namegduf> | Of course people would. |
03:43 | <@Alek> | Origin needs to implement it though. XD |
03:43 | <@Namegduf> | Steam's not exactly open entry as it is. |
03:44 | <@Namegduf> | They couldn't make it too painful, but they could certainly introduce a process and have some requirements that small. |
03:44 | <&Derakon> | I really think you underestimate the scale of effort you're expecting here. |
03:45 | <&ToxicFrog> | Namegduf: I'm really glad they don't. PC is a platform where developers can do more or less whatever they damn well please and I happen to like it that way. |
03:45 | <@Namegduf> | I don't think DE:HR invested that many dev hours in that patch. |
03:45 | <&ToxicFrog> | Also, the actual answer is "Microsoft, with Games for Windows" |
03:45 | <@Namegduf> | Nor does it sound like this 26 seconds to 5.5 seconds story was that rough. |
03:45 | <&ToxicFrog> | Which no-one pays any attention to because GFW certification doesn't actually guarantee anything gamers care about. |
03:46 | <&ToxicFrog> | (well, ok, GFW includes 64-bit support, in the "will not crash on a 64-bit OS" sense, and widescreen support, for a very loose definition of "support") |
03:46 | <@Namegduf> | I'm not saying I think a huge amount of effort should be invested. I'm saying, "I don't see a good reason why games should be releasing with low hanging fruit like this which they would leave unfixed if not forced, because it seems like this is a pretty common pattern." |
03:47 | <@Namegduf> | It's not even that unusual for a game on PC to release with awful load times and a patch to be released which improves it by a huge factor. |
03:47 | <@Namegduf> | DE:HR isn't alone there. |
03:47 | <@Namegduf> | Because it proved a common enough complaint post release to be worth patching. |
03:48 | <&Derakon> | The problem is that you're assuming this is low-hanging fruit in all cases. |
03:48 | <&Derakon> | Also that companies will do any work that they aren't proven to have to deal with. |
03:49 | <&ToxicFrog> | And that the developer has a priori knowledge that the load times will bother people more than, say, all of the NPCs having palsy |
03:49 | <&Derakon> | For every game that gets a patch that improves load times after the fact, there's at least another where nobody demanded a patch so it never happened. |
03:49 | <&ToxicFrog> | Which bothered me in DXHR way more than the load times did. |
03:49 | <&Derakon> | Therefore the clearly superior strategy from the company's perspective is to release without working on load times and then see if people complain. |
03:49 | <@Namegduf> | ...no, that's not how decisions work. |
03:50 | <@Namegduf> | It would be, if the advantage to you in the former case was equal to or greater than the disadvantage when they complain. |
03:50 | <@Namegduf> | Equality is exceedingly unlikely. |
03:51 | <&Derakon> | Uh, I'm having trouble parsing what you just said. |
03:51 | <&ToxicFrog> | Likewise. |
03:51 | <@Namegduf> | "You've at least a 50% chance of it not causing complaints, so do it and fix it if they complain." is not, in general, a "clearly superior" strategy. |
03:52 | <@Namegduf> | It depends on the cost of complaints vs the cost of doing it. |
03:52 | <&Derakon> | In my experience, gamers are very quick to forgive transgressions if it means they can play the games they want. |
03:52 | <@Namegduf> | If the cost of doing it is much higher than complaints, like 10 times higher, a 10% chance would do. |
03:52 | <&Derakon> | So the cost of complaints is typically miniscule. |
03:53 | <@Namegduf> | At release time? |
03:53 | <&Derakon> | Yep. |
03:54 | <&Derakon> | Of course they're not going to have anything that people actually care about break at release if they can help it. |
03:54 | <@Namegduf> | I think complaints around release time surely will depress sales from those who were in doubt, quite possibly more than other things which were added. |
03:54 | <&Derakon> | But as TF and I keep saying, load times are not one of those things~ |
03:54 | <@Namegduf> | Stuff's not binary in or out of that set of things either. |
03:55 | <&Derakon> | I never said it was. |
03:55 | <&Derakon> | In fact I keep saying that load times are just not important enough to get attention in the vast majority of cases. |
03:55 | <&Derakon> | And you keep stating the opposite. |
03:55 | <@Namegduf> | No, they put their dev time into shitty water effects instead. |
03:55 | <&Derakon> | And that's about as far as this conversation has gotten. |
03:55 | <&Derakon> | So if it's all the same to you, I'm going to give up on a clearly unproductive argument and go do something more interesting. |
03:55 | <&Derakon> | Because neither of us is getting through to the other. |
03:58 | <@Namegduf> | I actually think I get my answer reasonably well. |
03:58 | <~Vornicus> | SOMEONE IS WRONG ON THE INTERNET |
03:58 | <@Namegduf> | Shitty water effects and crappy hair behaviour are classified as part of "graphics" which is in the set of things considered significant, and loading times are not in that set. |
03:59 | <@Namegduf> | The set might not be binary, but people are prone to treating it as binary and having weird prioritisation as a result. |
03:59 | <@Namegduf> | Seems a reasonable model. |
04:02 | <@Namegduf> | Like how OpenOffice's incredibly shit performance was ever considered acceptable. "Performance" was simply not in the set of things they considered priorities, and it was either in or out. |
04:05 | <~Vornicus> | THE INTERNET IS WRONG ON SOMEONE |
04:14 | | Karono [Karono@Nightstar-03f66622.optusnet.com.au] has quit [[NS] Quit: ] |
04:18 | < Syka> | wait |
04:18 | < Syka> | was there a silly argument that i wasnt involved in |
04:23 | <~Vornicus> | unfortunately I don't know anyone named "Wrong" |
04:35 | < Syka> | i know a wong |
04:49 | | VirusJTG [VirusJTG@Nightstar-09c31e7a.sta.comporium.net] has quit [[NS] Quit: Program Shutting down] |
05:04 | | Karono [Karono@Nightstar-03f66622.optusnet.com.au] has joined #code |
05:17 | | Reiv [NSwebIRC@Nightstar-95746c1f.kinect.net.nz] has joined #code |
05:17 | | mode/#code [+o Reiv] by ChanServ |
05:32 | | Derakon is now known as Derakon[AFK] |
06:22 | | Kindamoody is now known as Kindamoody|out |
06:27 | | celticminstrel [celticminst@Nightstar-8403057e.dsl.bell.ca] has quit [[NS] Quit: KABOOM! It seems that I have exploded. Please wait while I reinstall the universe.] |
06:31 | | ErikMesoy|sleep is now known as ErikMesoy |
07:35 | | AverageJoe [evil1@Nightstar-4b668a07.ph.cox.net] has joined #code |
07:46 | | You're now known as TheWatcher |
07:57 | | Turaiel is now known as Turaiel[Offline] |
08:38 | | AverageJoe [evil1@Nightstar-4b668a07.ph.cox.net] has quit [Ping timeout: 121 seconds] |
09:58 | | * TheWatcher starts yet another exciting episode of WTF Was I Thiking Theater |
09:59 | | * Karono tunes in |
10:00 | <@TheWatcher> | In today's episode: why the fuck does this file contain both user profile database interaction code, and web ui generation code for an entirely different part of the system? Because Chris is a twazzock, apparently! |
10:01 | <@TheWatcher> | Next up: disentangling the recipient matrix UI code. |
10:02 | < jeroud> | It's because you were thiking instead of thinking, probably.~ |
10:06 | <@TheWatcher> | Obviously |
10:06 | | ktemkin is now known as ktemkin[pcb] |
10:15 | < ktemkin[pcb]> | Sounds like a good MVC object: the UserProfileModelControllerAlsoUnrelatedView |
10:17 | <~Vornicus> | that's about right |
10:19 | <~Vornicus> | ?7888888888888888888888888888888888888888888888888888888888888888888888888888888 888888888. |
10:19 | <~Vornicus> | Pearl has found the option key, apparently |
10:22 | < ktemkin[pcb]> | ... and all I can think is "that's now how you spell perl". |
10:23 | < ktemkin[pcb]> | I have a sneaking suspicion that my brain is rapidly replacing all of its worldly knowledge with engineering design techniques and standard library reference manuals. |
10:24 | <~Vornicus> | A genuine hazard in this business. |
10:27 | <@TheWatcher> | Also: Terminal4 CMS is a hideous pile of shit |
10:42 | < RichyB> | We've already passed the point where, when Vorn stars spitting out a large volume of repeated characters, we all go "eeeee, kitty! ?" instead of berating him for spamming. |
10:46 | < RichyB> | I kind of wish people would stop leaving trash like "#import pdb; pdb.set_trace()" lying around in production code. |
10:46 | < RichyB> | Only kinda. On the one hand, it's shitty and sloppy. |
10:47 | < RichyB> | On the opposite gripping appendage, it's a visual warning sign that there will probably be shitty, sloppy code nearby. |
10:47 | < RichyB> | Really, it'd be better to not have the sloppy code than to not have the sloppy comments. :) |
10:56 | < ktemkin[pcb]> | Better that than commented out unit tests. |
10:56 | < ktemkin[pcb]> | "The upgrade seems to have made these tests fail, but the product seems to be working." |
10:57 | | ktemkin[pcb] is now known as ktemkin |
11:03 | <@Tamber> | "seems to be" being the operative phrase in there. :x |
11:19 | | Karono_ [Karono@Nightstar-03f66622.optusnet.com.au] has joined #code |
11:20 | | Orthia [orthianz@3CF3A5.E1CD01.B089B9.1E14D1] has quit [Ping timeout: 121 seconds] |
11:20 | | Karono [Karono@Nightstar-03f66622.optusnet.com.au] has quit [Ping timeout: 121 seconds] |
11:23 | | Karono [Karono@Nightstar-03f66622.optusnet.com.au] has joined #code |
11:23 | | Karono_ [Karono@Nightstar-03f66622.optusnet.com.au] has quit [Ping timeout: 121 seconds] |
11:24 | | Karono is now known as NSGuest44445 |
11:26 | | Karono [Karono@Nightstar-03f66622.optusnet.com.au] has joined #code |
11:27 | | NSGuest44445 [Karono@Nightstar-03f66622.optusnet.com.au] has quit [Ping timeout: 121 seconds] |
11:27 | | Karono is now known as NSGuest14844 |
11:30 | | Karono [Karono@Nightstar-03f66622.optusnet.com.au] has joined #code |
11:31 | | NSGuest14844 [Karono@Nightstar-03f66622.optusnet.com.au] has quit [Ping timeout: 121 seconds] |
11:31 | | Karono is now known as NSGuest51212 |
11:34 | | Karono [Karono@Nightstar-03f66622.optusnet.com.au] has joined #code |
11:35 | | Karono is now known as NSGuest63925 |
11:36 | | NSGuest51212 [Karono@Nightstar-03f66622.optusnet.com.au] has quit [Ping timeout: 121 seconds] |
11:40 | | NSGuest63925 [Karono@Nightstar-03f66622.optusnet.com.au] has quit [Ping timeout: 121 seconds] |
11:42 | | VirusJTG [VirusJTG@Nightstar-09c31e7a.sta.comporium.net] has joined #code |
12:05 | | Orthia [orthianz@3CF3A5.E1CD01.B089B9.1E14D1] has joined #code |
12:05 | | mode/#code [+o Orthia] by ChanServ |
12:06 | | NSGuest63925 [Karono@Nightstar-03f66622.optusnet.com.au] has joined #code |
12:06 | | NSGuest63925 is now known as Karono |
12:09 | | Karono_ [Karono@Nightstar-03f66622.optusnet.com.au] has joined #code |
12:09 | | Karono [Karono@Nightstar-03f66622.optusnet.com.au] has quit [NickServ (GHOST command used by Karono_)] |
12:09 | | Karono_ is now known as Karono |
13:03 | | PinkFreud [WhyNot@NetworkAdministrator.Nightstar.Net] has quit [Ping timeout: 121 seconds] |
13:06 | | VirusHome [VirusJTG@Nightstar-09c31e7a.sta.comporium.net] has joined #code |
13:06 | | Netsplit *.net <-> *.split quits: @Namegduf, @Tamber, @iospace, McMartin, ktemkin, Typh|offline, Xon2, sshine, @Zemyla, Karono, (+5 more, use /NETSPLIT to show all of them) |
13:06 | | Karono_ [Karono@Nightstar-03f66622.optusnet.com.au] has joined #code |
13:07 | | Netsplit over, joins: sshine |
13:07 | | Karono_ is now known as Karono |
13:08 | | Xon [Xon@9C034E.A7474E.446F1A.DEA144] has joined #code |
13:08 | | [R] [rstamer@Nightstar-e681a855.org] has joined #code |
13:09 | | VirusHome is now known as Pandemic |
13:10 | | mode/#code [+o Pandemic] by ChanServ |
13:10 | | Namegduf [namegduf@Nightstar-5c10d129.beshir.org] has joined #code |
13:10 | | mode/#code [+o Namegduf] by ChanServ |
13:11 | | Azash [ap@Nightstar-339920e6.net] has joined #code |
13:11 | | mode/#code [+o Azash] by ChanServ |
13:11 | | iospace [Alexandria@Nightstar-e67f9d08.com] has joined #code |
13:11 | | mode/#code [+o iospace] by ChanServ |
13:11 | | McMartin [mcmartin@Nightstar-c2f37ed0.pltn13.sbcglobal.net] has joined #code |
13:11 | | mode/#code [+ao McMartin McMartin] by ChanServ |
13:11 | | Zemyla [zemyla@Nightstar-8fbb7981.compute-1.amazonaws.com] has joined #code |
13:11 | | mode/#code [+o Zemyla] by ChanServ |
13:13 | | Tamber [tamber@furryhelix.co.uk] has joined #code |
13:13 | | mode/#code [+o Tamber] by ChanServ |
13:14 | | Typh|offline [Typherix@Nightstar-7dc8031d.mi.comcast.net] has joined #code |
13:14 | | ktemkin [ktemkin@Nightstar-117b45a4.c.ircrelay.com] has joined #code |
13:15 | | Turaiel[Offline] [Brandon@Nightstar-7dc8031d.mi.comcast.net] has joined #code |
13:35 | | Kindamoody|out [Kindamoody@Nightstar-05577424.tbcn.telia.com] has quit [Client exited] |
13:35 | | Kindamoody|autojoin [Kindamoody@Nightstar-05577424.tbcn.telia.com] has joined #code |
13:35 | | mode/#code [+o Kindamoody|autojoin] by ChanServ |
14:13 | | celticminstrel [celticminst@Nightstar-8403057e.dsl.bell.ca] has joined #code |
14:13 | | mode/#code [+o celticminstrel] by ChanServ |
14:14 | <@TheWatcher> | Ugh |
14:15 | <@TheWatcher> | I'm actually starting to wonder if it wouldn't be easier to simply scrap most of this code and start over |
14:16 | <@iospace> | sometimes that's the best solution |
14:17 | <@Azash> | Make seventy-six to throw away |
14:31 | | Vornicus [vorn@ServerAdministrator.Nightstar.Net] has quit [[NS] Quit: Leaving] |
15:16 | | jeroud [uid10043@Nightstar-7fd75919.irccloud.com] has joined #code |
15:24 | | Karono is now known as Karono_ |
15:24 | | Karono_ [Karono@Nightstar-03f66622.optusnet.com.au] has quit [[NS] Quit: ] |
15:24 | | Karono [Karono@Nightstar-03f66622.optusnet.com.au] has joined #code |
15:42 | | * TheWatcher fiddles with user interface design issues |
15:56 | <&ToxicFrog> | I'm so sorry~ |
15:59 | <@iospace> | hahah |
15:59 | <@iospace> | and here i am |
15:59 | <@iospace> | fussing with i2c still :P |
16:01 | <&ToxicFrog> | And here I am trying to get my stuff to pass lint |
16:01 | <@TheWatcher> | So, I have a tree of Thingies, each of which can have several options set or not. Thus far it has been accomplished with a table along the lines of http://pastebin.starforge.co.uk/571 where the [ ]s are checkboxes, but for Various Raisins I need to reduce the footprint of these options. I'm thinking of replacing the checkboxes with a button that shows a length-limited summary of selected options that, when clicked, opens a popup containing |
16:01 | <@TheWatcher> | checkboxes for each option. |
16:06 | | Karono [Karono@Nightstar-03f66622.optusnet.com.au] has quit [Connection closed] |
16:11 | <&ToxicFrog> | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA WHAT THE FUCK |
16:11 | <&ToxicFrog> | My TL just showed up in a suit |
16:11 | <&ToxicFrog> | It is the end times! |
16:11 | <@Tamber> | Whose funeral is it? |
16:12 | | AverageJoe [evil1@Nightstar-4b668a07.ph.cox.net] has joined #code |
16:12 | <&ToxicFrog> | I don't know. I'm afraid to ask. |
16:12 | <&ToxicFrog> | What if the suit eats me? |
16:12 | <&ToxicFrog> | It's clearly too late for him, but the rest of us can still save ourselves. |
16:13 | | AverageJoe [evil1@Nightstar-4b668a07.ph.cox.net] has quit [Client closed the connection] |
16:13 | <&ToxicFrog> | In other news |
16:13 | <&ToxicFrog> | >>> boolean([]) |
16:13 | <&ToxicFrog> | False |
16:14 | <@TheWatcher> | wat |
16:15 | <&ToxicFrog> | >>> map(bool, [None, 0, 0.0, "", [], {}]) |
16:15 | <&ToxicFrog> | [False, False, False, False, False, False] |
16:15 | <&ToxicFrog> | EVERYTHING IS BOOLEAN FALSE |
16:15 | <&ToxicFrog> | RUN WHILE YOU STILL CAN |
16:15 | <@iospace> | YOU'RE FALSE |
16:16 | <@Tamber> | Your face is false! |
16:16 | <@TheWatcher> | This statement is false! |
16:16 | <@Tamber> | ...Ooh! ...why... ooh... you blighter! |
16:17 | <@TheWatcher> | Just be thankful you're not an android, or your head would have exploded. And there's no such place as silicon heaven. |
16:18 | < RichyB> | In Python, __bool__() defaults to (lambda self: len(self) > 0) |
16:18 | < RichyB> | I don't see any particular reason why that would be surprising behaviour? |
16:19 | < RichyB> | TheWatcher: but where do all the *calculators* go? |
16:19 | <@Tamber> | ...damn, beaten to it. |
16:19 | <@Tamber> | I obviously need to spend less time getting tea. |
16:23 | <@celticminstrel> | XD |
16:24 | <&ToxicFrog> | RichyB: the surprising behaviour is that in the languages I use regularly that aren't python, that's either a type error or true; more generally, I'm used to "false and nil-equivalent are false and everything else is either true or not-a-boolean" |
16:24 | <&ToxicFrog> | 0 and the empty list both being false is alarming. |
16:25 | <@celticminstrel> | ...zero is false in lots of languages. |
16:25 | <&ToxicFrog> | Yes, but not any that I use regularly. |
16:25 | | Turaiel[Offline] is now known as Turaiel |
16:26 | < RichyB> | () and [] being falsy are consistent with immutable nil being falsy. |
16:27 | < RichyB> | It just doesn't bug me for some reason that it's not consistent with other languages. |
16:28 | <&ToxicFrog> | Consistent how? |
16:29 | <&ToxicFrog> | It is not universally the case that nil and the empty list are eqv; the only language I can think of offhand where that's the case is scheme. |
16:30 | <&ToxicFrog> | And in python () and [] and {} and None are all very different despite being falsy. |
16:31 | < RichyB> | Elisp also, I think, uses "nil" and false interchangably. |
16:31 | <@Tarinaky> | Is () a valid object in Python? |
16:31 | <@Tarinaky> | That looks wrong to me. |
16:31 | < RichyB> | Sure. () is a zero-arg tuple. |
16:31 | <@Tarinaky> | Since tuples are immutable I thought they had to be at least 1 arg. |
16:31 | <&ToxicFrog> | Yep: >>> type(()) |
16:31 | <&ToxicFrog> | <type 'tuple'> |
16:32 | <@Tarinaky> | Hunh. |
16:33 | < [R]> | I like how tuples go: () (1,) (1,2) (1,2,3) |
16:34 | <&ToxicFrog> | RichyB: in particular, in the three languages I use most commonly (scala, clojure, and lua), the former has a static type system and an approach to nil vs null vs nothing that I can't concisely summarize, and the latter two treat nil and the empty list as nonequivalent in both value and type. |
16:36 | <&ToxicFrog> | (in scala, true is true and false is false and everything else is a compile time error; in the other two nil and false are false and everything else is true.) |
16:36 | <@Tarinaky> | Python's approach to None is basically a 'safe' version of C/C++ null pointers. |
16:37 | <&ToxicFrog> | Apart from those I use C++ (0, NULL, and false are not just equivalent but are the same value), and Python. And it's Python's approach I find weirdest. |
16:37 | <@Tarinaky> | You have a variable that points to the One True Global None object. |
16:37 | <&ToxicFrog> | C++ at least has the excuse of being a low level language. |
16:39 | <&ToxicFrog> | None being false doesn't particularly bother me, since it's the language's nil-equivalent. |
16:41 | | ErikMesoy is now known as Harrower |
16:42 | <@Tarinaky> | It also allows for you to use None as an ersatz null pointer and make the if statements look C-like... |
16:52 | < ktemkin> | Heh. |
16:52 | < ktemkin> | It's all better than PHP's type-juggling. |
16:54 | < ktemkin> | Python's falsey types are odd, though. I'm only a casual pythonista, so I've never really tried things like 0 == False. |
16:56 | < ktemkin> | (At least "0" isn't falsey.) |
16:57 | | * iospace likes her C thank you |
16:57 | < Harrower> | Python considers 0 to be false, 1 to be true, and 2 to be neither. |
16:59 | < ktemkin> | I like Ruby/lua's behavior; where nil and false are falsey; and everything else is true. |
17:08 | < Syka> | ktemkin: i don't |
17:08 | <@Tamber> | You don't like *anything*, though. |
17:09 | < Syka> | >>> bool("false") |
17:09 | < Syka> | True |
17:09 | < Syka> | :( |
17:09 | <&ToxicFrog> | ktemkin: aaaa what the fuck, I didn't even consider trying that |
17:09 | <&ToxicFrog> | >>> map(lambda x: x == False, [None, 0, 0.0, "", [], {}, ()]) |
17:09 | <&ToxicFrog> | [False, True, True, False, False, False, False] |
17:09 | <@celticminstrel> | C++11 adds nullptr |
17:09 | <&ToxicFrog> | Apparently, 0 and 0.0 are not just eqv to False, they are completely equal to it |
17:09 | <@celticminstrel> | And GCC had NULL as a unique value before that |
17:11 | <@Azash> | http://blogs.citrix.com/2013/06/25/xenserver-6-2-is-now-fully-open-source/ |
17:13 | < RichyB> | PESTILENCE BE UPON THEY WHO TRY TO TUNE PERFORMANCE WITHOUT MEASURING TIMINGS |
17:13 | < RichyB> | DEATH BE UPON THEY WHO JAM A CACHE IN AT RANDOM WITHOUT BOTHERING TO MEASURE THEIR FUCKING HIT RATE |
17:13 | <@froztbyte> | hahahahaha |
17:14 | < Syka> | bahaha |
17:15 | < RichyB> | Azash: oh really? I thought Xen Cloud Platform was already the fully-open-source version of XenServer. |
17:16 | < ktemkin> | ToxicFrog: They /do/ fail on 'is'. |
17:16 | < ktemkin> | They're equal, but not identical. |
17:18 | < RichyB> | >>> [2 is 1+1, 257 is 256+1] |
17:18 | < RichyB> | > [True, False] |
17:18 | < RichyB> | >>> 256 is 255 + 1 |
17:18 | < RichyB> | > True |
17:19 | <&ToxicFrog> | ...python interns ints, but only ints <= 256? |
17:19 | < RichyB> | Yyyup. |
17:19 | < ktemkin> | I thought all ints were immutable in python /for that purpose/. |
17:20 | < RichyB> | Somewhere there's a PyObject*[515] cached_ints; |
17:20 | < RichyB> | 515 is a guess at the exact number |
17:20 | < RichyB> | I think it's [-256:+256] inclusive but I might have that wrong. |
17:21 | < RichyB> | er, 513, even. |
17:22 | < ktemkin> | But still-- why would they create mutiple instances of future integers? |
17:22 | < ktemkin> | *multiple |
17:23 | < ktemkin> | To save on lookup times in the future? |
17:23 | < RichyB> | No, it's filled out lazily. |
17:24 | < RichyB> | Every Python object allocation involves a malloc() and some filling out of headers. |
17:25 | < RichyB> | er I'm not actually sure about that |
17:25 | < RichyB> | But anyway, the bytecode for the (+) operator on ints checks to see if the value is inside [-256:+256] and if so grabs a value out of that array, which is just operator[] in plain old ANSI C, which is of course basically instant. |
17:27 | < RichyB> | The range check and array dereference add up to a couple dozen instructions with lots of dependencies between them; at a guess I'd call it 100ns at most (not that I have measured)? I think that most Python bytecodes take around 1us to process each (I have measured that, but take my measurement with much salt because it's under very unfavourable circumstances). |
17:28 | < ktemkin> | Which is all well and good; but I don't see why they wouldn't memoize integer creation in general. |
17:29 | < RichyB> | Ah right. Because 1024 * 1024 * 1024; how big is your array of preallocated integers now? |
17:29 | < ktemkin> | Perhaps using something like a semi-associative hash. |
17:29 | < RichyB> | If you use a hash table or linear scan for that then you've just made a hash-table lookup for something that might not happen all that often anyway. |
17:30 | < RichyB> | I believe that it's been tried, measured & found that larger integers tend not to come up as often as the small ones. |
17:30 | < RichyB> | That ought to make sense; the space of big integers is larger than the space of little ones so you expect fewer collisions. :) |
17:31 | <@iospace> | remember kids |
17:31 | <@iospace> | there's no excuse for using emacs |
17:31 | < RichyB> | iospace: I use ed. |
17:31 | < RichyB> | iospace: inside Emacs M-x shell |
17:31 | < RichyB> | No other text editor works reliably when $TERM is "dumb". |
17:31 | < RichyB> | ? |
17:32 | < ktemkin> | If I call list(range(0, 1024)) twice, wouldn't I wind up with 768 redundant integers? |
17:32 | < RichyB> | Perhaps. Probably not. CPython ref-counts. |
17:33 | < ktemkin> | At least while they're still in memory. |
17:33 | < ktemkin> | x = list(range(1, 1024)) #repeat for y |
17:33 | < ktemkin> | x[500] is y[500 |
17:33 | < ktemkin> | * x[500] is y[500] # is False |
17:33 | < RichyB> | If you're not keeping those lists around, you'l end up with 768 unnecessary free()s immediately followed by 768 unnecessary malloc()s. |
17:34 | < RichyB> | Yeah, while both are in memory, you'll get duplicate integer objects. |
17:34 | < ktemkin> | Which in turn means there's at least a couple of levels of indirection in comparing those two. |
17:35 | < RichyB> | Note that interning (the name for this optimisation) isn't a performance win unless (cache hit rate * time it would take to allocate an object) > (time it takes to search the cache). |
17:37 | < ktemkin> | You mean cache miss rate. |
17:38 | < RichyB> | No, (cache hit rate * time taken for one allocation) is the amount of time that you save per average object. |
17:38 | < ktemkin> | You're trying to compute the expected value of an access time; which is the probability of a miss times the miss penalty plus the probability of a hit times penalty to a hit. |
17:38 | | Turaiel is now known as Turaiel[Offline] |
17:40 | < ktemkin> | The speedup, in turn, is the ratio of old expected access time over the new expected access time. |
17:41 | < ktemkin> | The miss penalty in that case is (lookup time + new object allocation time); whereas the hit penalty would just be lookup time. |
17:42 | < RichyB> | Fine. E(cost without cache) = malloc(); E(cost with cache) = (1 - P(hit))*E(miss) + P(hit)*E(hit) = (1 - P(hit))*(malloc + search) + P(hit)*(search) = search + (1 - P(hit))*malloc |
17:43 | < RichyB> | You're after E(cost with cache) < E(cost without cache), so you want: malloc < search + (1 - P(hit))*malloc |
17:44 | | Turaiel[Offline] is now known as Turaiel |
17:44 | < ktemkin> | I don't disagree with your conclusion; I was just nitpicking. |
17:44 | < RichyB> | After getting a fourteen-year-old to do some algebra for you, you now have: P(hit)*malloc < search |
17:44 | < RichyB> | er |
17:44 | < RichyB> | er, < and > the other way around |
17:45 | < RichyB> | Or is it the other other way around? Anyway, fuck it all. You end up with the inequality that I started with, so quitcher nitpicking. |
17:49 | < ktemkin> | Yep; you're right. |
17:49 | < RichyB> | I don't object to people correcting my maths, but wait until I get it wrong first |
17:49 | < RichyB> | You will not have to wait very long. ;) |
17:49 | <@Tamber> | Still, it's the principle of the thing. |
17:51 | < ktemkin> | Exchanging "I think you're wrong <here>" is how you improve the state of a body of knoweldge. |
17:51 | < ktemkin> | I come in with prior beliefs, you come in with prior beliefs; and priors are exchanged until everything makes sense. |
17:52 | <@Tamber> | Which, if I am involved at any point, will take a looong time. |
17:52 | <@Tamber> | (I am not the sharpest crayon in the box.) |
17:53 | | * Syka mashes Tamber against the page, gets the same result |
17:55 | < ktemkin> | In any case, you'd really need an accurate profile of the frequencies at which various integers were created and compared to figure out whether any given optimization yields a positive speedup. |
17:55 | < RichyB> | Right, but all you said there was precisely the algebra that I'd already done in my head, but in verbal form rather than symbolic so that it's harder to read. |
17:56 | < RichyB> | Also computing it as a ratio for some extra complication instead of just an inequality. Those are easier to work. |
17:56 | < RichyB> | No, you don't need to carefully compute that in advance by knowing about the p.d.f. of integer creation. |
17:57 | < RichyB> | In practice, you don't actually know what lookup and malloc times are in advance anyway because they depend on a million details of CPU state on the way into the addition op. |
17:58 | < RichyB> | What you do instead is take a large body of representative benchmarks and run them with and without intern'd caches of various sizes to verify experimentally whether or not it's an optimisation after the fact. |
18:04 | < ktemkin> | Hmm. Thanks for the (correct) perspective. |
18:04 | < ktemkin> | "you don't actually know what lookup and malloc times are in advance anyway" <-- That was something I had neglected to account for. (I am used to thinking of cache speedups in terms of modifications to cache hardware.) |
18:05 | < RichyB> | Er, I'm sorry for getting cranky at you. |
18:05 | | Derakon [Derakon@Nightstar-a3b183ae.ca.comcast.net] has joined #code |
18:05 | | mode/#code [+ao Derakon Derakon] by ChanServ |
18:06 | < ktemkin> | That's no problem at all. I appreciate your taking the time to put your thoughts into words. |
18:08 | | Derakon[AFK] [Derakon@Nightstar-a3b183ae.ca.comcast.net] has quit [Ping timeout: 121 seconds] |
18:15 | < ktemkin> | Note that if I say something contrary to something you've said -- or say "I don't see why <x>", that's not necessarily an indication that I'm confident that you're wrong. |
18:15 | < ktemkin> | If I equally willing to accept any explanation, then I know nothing. |
18:16 | < ktemkin> | *I'm equally |
18:23 | < ktemkin> | In any case, popping one level up the conversation stack: at least Python's equivalence operator seems to be transitive. |
18:25 | < ktemkin> | There are some terrible languages (*cough* PHP *cough*) who don't even sate that criteria. ("hello" == true, and 0 == "hello", but 0 != true) |
18:28 | | Derakon [Derakon@Nightstar-a3b183ae.ca.comcast.net] has quit [Ping timeout: 121 seconds] |
18:29 | | Derakon [Derakon@Nightstar-a3b183ae.ca.comcast.net] has joined #code |
18:29 | | mode/#code [+ao Derakon Derakon] by ChanServ |
18:30 | <@iospace> | http://news.yahoo.com/blogs/sideshow/teen-celebrates-first-birthday-142404291.ht ml this is fucked up |
18:31 | <@Tamber> | Wow |
18:33 | <@iospace> | oops, meant for #Fleet |
18:33 | <@iospace> | but still |
18:35 | < RichyB> | ktemkin: JavaScript too. :) |
18:35 | < RichyB> | https://www.destroyallsoftware.com/talks/wat |
18:45 | | Turaiel is now known as Turaiel[Offline] |
18:58 | < ktemkin> | For some reason, I never feel like picking on JavaScript as much as I do on PHP. Perhaps because js's deep fans have the attitude "We know our language is half-bad, but we sure like the Good Parts." |
18:58 | < ktemkin> | PHP's fans act as though every criticism of PHP is false. |
18:59 | <@Tamber> | ISTR hearing something similar RE: Perl users. "Your language sucks!" "Yeah, I guess it does. ...anyway, I gotta get back to work." |
19:00 | < ktemkin> | I remember a similar quote, in one someone said something like "People may try to tell you that perl doesn't scale well; or that it's not an enterprise-worthy solution, but you won't hear them, because you'll be done and have already left for the pub." |
19:02 | < Harrower> | "There are two kinds of languages: those nobody likes, and those nobody uses." |
19:06 | <@Tamber> | "And then there's the LISPs, which straddle both categories at once" |
19:07 | <@Tamber> | (Or something of that ilk.) |
19:18 | < ktemkin> | That wat talk, incidentally, was very, very funny. |
19:18 | < ktemkin> | Thank you for the link. |
19:19 | <@gnolam> | ktemkin: really? My view of JS/PHP coders is the opposite. |
19:21 | <&ToxicFrog> | Mine is closer to ktemkin's. |
19:22 | <&ToxicFrog> | Every PHP coder I've interacted with has either been someone who primarily works in other languages but has been roped into supporting some legacy PHP app, or someone who works exclusively in PHP and is convinced that it is not just a good language, but the best language, for everything, forever. |
19:22 | < ktemkin> | You have no idea how many PHP coders have told me that writing a web app in Ruby/Python/NodeJS was just "stupid", as "PHP is omnipresent". |
19:25 | < ktemkin> | And since that's obviously a correct argument, from now on I'm writing all of my webapps targeting the bourne shell. |
19:26 | <@Tamber> | Nah, write them all to target i386 in ASM. |
19:27 | <&ToxicFrog> | ktemkin: I have in fact done that, back when I was young and stupid. |
19:27 | < ktemkin> | Our department's crypto expert writes his webapps in TCL. |
19:27 | < ktemkin> | He also uses vi-- not vim, vi. |
19:29 | < ktemkin> | Tamber: I teach electrical/computer engineering classes at a large university. At one point, I was talking to the undergraduate director of our CS department. She was convinced that no one needs to learn assembly or hardware design anymore, as everything would soon be "on the cloud". |
19:29 | < ktemkin> | I suppose I should just be targeting that directly. |
19:30 | <@Tamber> | What, "the cloud"? |
19:30 | <@gnolam> | Damn you, cloud-to-butt. Now I'm translating that in my head. |
19:30 | <@Tamber> | I have mine s/cloud/bullshit; it has reprogrammed me rather worryingly |
19:31 | <@Azash> | Welcome to your regular question hour with Azash |
19:31 | <@Azash> | Today's query: If I build a site like <html><noscript>blabla></noscript></html> |
19:31 | <@Azash> | Will those with JS enabled only see a blank page? |
19:31 | <@Tarinaky> | I think the accepted substitution is s/the cloud/someone elses computers/ |
19:32 | <&ToxicFrog> | Azash: try it and see? |
19:33 | | * Tarinaky runs his IRC client on the cloud. |
19:35 | <@Tamber> | Although, it does lead to some hilarious things such as: "Get a feel of a super-elastic bullshit - spawn eight new bullshit servers with a single click", when it gets hold of reddit link titles :D |
19:35 | <@Azash> | Right |
19:35 | < RichyB> | Azash: yes. |
19:36 | <@Azash> | Damn |
19:36 | < RichyB> | Why's that a problem? |
19:36 | <@Azash> | Thought it might have been a good way to lock down a page |
19:36 | < RichyB> | If you want users both with and without javascript to see the same content... omit the <noscript> tag. |
19:36 | < RichyB> | Um, what? |
19:36 | <@Azash> | Like "don't do JS on this page" |
19:37 | < RichyB> | No. |
19:37 | < RichyB> | The way that you prevent JS from running on your web page is that you avoid putting any <script> tags in in the first place. |
19:38 | <@Azash> | Yep |
19:38 | < RichyB> | If you want to try to prevent javascript in things like GreaseMonkey extensions from running then... give up already, you don't and never will have that much control over strangers' web-browsers. |
19:38 | <@Tamber> | Whenever anyone says they want to "lock down a page", RE: anything HTML, I just laugh at them. |
19:38 | <@Azash> | Thanks Tamber |
19:38 | < RichyB> | Tamber: be nice. ;P |
19:38 | <@Tamber> | I am. |
19:38 | <@Tamber> | :) |
19:38 | <@Azash> | RichyB: Was more like me not entirely trusting myself to prevent XSS |
19:39 | < RichyB> | Well, how are you generating these pages in the first place? |
19:40 | < RichyB> | Generally the way you avoid tripping yourself up with XSS vulns is by always using a HTML or XML templating system that escapes text that you put into it by default. Say, Chameleon in Python. |
19:41 | <@Azash> | Hm.. |
19:41 | < RichyB> | A fairly large fraction of XSS vulns come from "some numbnuts thought you could just concatenate strings together and spit directly into the output." |
19:41 | | Kindamoody|autojoin is now known as Kindamoody |
19:42 | | Derakon [Derakon@Nightstar-a3b183ae.ca.comcast.net] has quit [Ping timeout: 121 seconds] |
19:43 | | Derakon [Derakon@Nightstar-a3b183ae.ca.comcast.net] has joined #code |
19:43 | | mode/#code [+ao Derakon Derakon] by ChanServ |
19:43 | < RichyB> | e.g. if you write a CGI program like: int main() { printf("<html>Your query string was %s.\n</html>", getenv("QUERY_STRING"); } then you're going to have a bad time. |
19:43 | <@Azash> | Yeah I know how to avoid tainted source |
19:43 | <@Azash> | Just.. Is it good enough and so on |
19:43 | <@Azash> | :P |
19:43 | <@gnolam> | JS Sedai |
19:44 | <@celticminstrel> | ...heh |
19:44 | <@Azash> | You can call it permanent coding paranoia |
19:44 | <@celticminstrel> | Nice, gnolam. :P |
19:44 | < RichyB> | OTOH if you write a CGI program like: int main() { printf("<html>Your query string was %s.\n</html>", html_quote(getenv("QUERY_STRING")); return 0; } then you'll be fine, assuming a reasonable html_quote() function. |
19:45 | < RichyB> | Azash: it's not "be scared of user input", it's "always encode data correctly for its intended delivery mechanism". |
19:45 | <@Azash> | I'm always scared of user input, but what I meant was more "am I really covering enough bases?" |
19:46 | <@Azash> | I thought there were eg. XSS methods that bypass html_quote |
19:46 | < RichyB> | If you're using a templating system where you build up a DOM in memory and then it serializes that at the browser, you'll usually be fine by default. If you're using a system where you concatenate strings... give up and switch for a native xml library. |
19:47 | < RichyB> | No, nothing's going to dodge correctly encoding text into html. |
19:47 | < ktemkin> | There are lists of benchmark XSS attack scripts you can run against your system if you want a little bit more peace of mind. |
19:47 | < RichyB> | If you want to really worry about it, read http://code.google.com/p/browsersec/ |
19:47 | < ktemkin> | and by "attack scripts" I mean snippets of HTML code that try to evade XSS quoting |
19:48 | < RichyB> | ? buncha people very carefully examine behaviour of current web-browsers relative to scary inputs. |
19:48 | < ktemkin> | https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet |
20:12 | < ktemkin> | When I give quizzes, I have a habit of bolding the actual directions so they stand out from the background information. I've found that generally makes it easier for good students to find the wording of the question when they're checking their work. |
20:12 | < ktemkin> | Unfortunately, it now seems that if I don't bold the questions, my students just don't bother answering them. |
20:12 | < ktemkin> | These are engineering undergrads. =\ |
20:12 | <@Tamber> | Next time, don't bold *anything*? :) |
20:12 | < Syka> | bold the entire page |
20:13 | < Syka> | then italicise it and underline it |
20:13 | < Syka> | then put it in technicolour wordart |
20:13 | < Syka> | then theyll notic |
20:13 | < Syka> | e |
20:14 | < ktemkin> | It's kind of like how they ignore text that's in warning red. |
20:14 | <@Tarinaky> | ktemkin: Maybe you should tell the good students to underline the questions as they read? |
20:15 | < ktemkin> | They're adults-- at a university. I shouldn't /have/ to. |
20:16 | <@Tarinaky> | They've also had widely different education in widely different qualities? |
20:17 | <@Tarinaky> | It's something to suggest when demonstrating example questions at the same time you remind them to draw a fucking diagram >.> |
20:19 | < ktemkin> | I don't think it'd be beneficial to make those kinds of suggestions, anyway. Unfortunately, things like "underline key words as you read" are very much reminiscient of the patronizing "study skills" they teach most students as a test-taking "strategy". |
20:20 | <@Tarinaky> | Well... hilighting the questions (for them) is a bad idea if the questions aren't going to be hilighted in the exam :p |
20:20 | <@Tamber> | I still think, next time, you just don't hilight anything at all; and prepare a "Start thinking, dumbasses" lecture for the ones who fail completely :p |
20:21 | <@TheWatcher> | That's... interesting |
20:22 | <@Tarinaky> | I mean. Only the minority of the room are actually at the lecture for any reason other than to pass the exam right? >.> |
20:22 | <@TheWatcher> | `const char *typename = typeid(*msg).name();` is crashing |
20:24 | < ktemkin> | for any reason other than to pass the exam right <-- No, and I despise the kind of classrooms where students are actually driven by tests. |
20:26 | < ktemkin> | I provide short (<10 minute) video lectures in lieu of normal lectures (that length is based on the ~20 minutes projected maximum that a student can focusbefore they suffer ego depletion.) |
20:27 | < ktemkin> | The lecture period is replaced by short activies, in which they actually design systems and have to explain the concepts to me. |
20:30 | | * TheWatcher has a really nasty feeling that this is a corrupt vtable issue |
20:33 | < ktemkin> | I make sure that they're engaged in hands-on design of "cool" non-trivial systems throughout the course; in general, they're either motivated by the fact that the material is actually interesting, by the social pressure of contributing to their group discussions, or by the fact that they get to leave early if they finish the questions faster. |
20:34 | < ktemkin> | My class is at lunchtime, and they have another class after; so if they can finish early they can get lunch. I'm sure that's been a big motivating factor. |
20:34 | | PinkFreud [WhyNot@NetworkAdministrator.Nightstar.Net] has joined #code |
20:34 | | mode/#code [+o PinkFreud] by ChanServ |
20:48 | <@Tarinaky> | ktemkin: Even if you're not teaching towards the test the majority of the students only care about the test. |
20:49 | <@Tarinaky> | To say anything else is hubris. |
20:50 | <@Tarinaky> | s/test/credits/ |
20:54 | <@froztbyte> | that sounds like an opinion, not a fact |
20:55 | <@Tarinaky> | It's an opinion that's hard to challenge without sounding egotistical. |
20:56 | <@froztbyte> | that also sounds like an opinion |
20:56 | <@TheWatcher> | I note that, while it may be an opinion, he isn't actually wrong in the majority case |
20:56 | <@Tarinaky> | Are you really so good that you can hold the attention of 51% * [size of class, /including/ the people who haven't bothered to show up at all]? Especially when you're teaching something that's one of: difficult, boring or arcane? |
20:57 | <@Tarinaky> | Noting that if it's not one of those three adjectives why the hell is it a University course? |
20:57 | <@TheWatcher> | In work we have /horrible/ problems getting students to do anything if it doesn't have marks attached |
20:57 | <@TheWatcher> | Even then, they work tactically |
20:58 | <@Tarinaky> | Heh. |
20:59 | <@TheWatcher> | They evaluate wehther the marks are appropriate for their estimate of the time and effort required, and will spend their time elsewhere if not. |
20:59 | <@TheWatcher> | They've actually told us this |
21:00 | <@froztbyte> | that, in turn, sounds exactly like students I know |
21:00 | <@froztbyte> | but I had two profs who were goddamned rocking |
21:00 | <@froztbyte> | and people would be EARLY to their classes |
21:01 | <@froztbyte> | and literally sit in the aisles |
21:01 | <@TheWatcher> | Oh, yeah, there are exceptions to the rule - but it is very, very rare. |
21:01 | <@froztbyte> | I think I was pretty lucky to have 2 like that in a very short stint |
21:02 | <@TheWatcher> | (it is frankly depressing, but meh) |
21:02 | <@froztbyte> | since I only did uni for 1.5 years before I got fucked off at the useless bureaucrazy of it all |
21:03 | <@froztbyte> | (my uni actually managed to, in separate incidents, lose HALF MY SUBJECT PORTFOLIO, and then later lose my actual tests and exams) |
21:03 | <@TheWatcher> | That's pretty impressive |
21:03 | <@froztbyte> | end of first year they wanted to say I couldn't continue, I asked why, "you have insufficient credits" |
21:03 | <@froztbyte> | me: "....how?" |
21:03 | <@froztbyte> | them: "your subjects are wrong" |
21:03 | <@froztbyte> | at this point in time I'm pretty confused, so I start fighting * about it |
21:04 | <@froztbyte> | turns out somehow half my subjects had got turned into medical ones |
21:04 | <@froztbyte> | which broke the criteria on the engineering stuff |
21:04 | <@froztbyte> | a mere couple of months later they managed to lose 2 of my exams and 3 tests |
21:04 | <@froztbyte> | so I said "fuck this" and left |
21:05 | <@Azash> | froztbyte: Let me guess, this was a uni that charged for tuition? |
21:06 | <@froztbyte> | of course |
21:06 | | Kindamoody is now known as Kindamoody[zZz] |
21:11 | <@Tarinaky> | There's any other kind in the western-anglosphere? |
21:12 | <&ToxicFrog> | Afternoon meeting is cancelled \o/ |
21:12 | < Harrower> | Is Norway in the western-anglosphere? |
21:12 | <@Tarinaky> | No. |
21:12 | <@Tarinaky> | I should have written western anglo-sphere. |
21:12 | <@Tarinaky> | it's not the western half of the anglo-sphere. >.> |
21:12 | <@froztbyte> | I have found a couple of smallish places in america which run on other means |
21:13 | <@Azash> | Over here universities are funded based on the amount of credits scored and degrees earned |
21:13 | <@Tarinaky> | But it's the US, UK, most of Canada... |
21:13 | <@Azash> | Meaning there's an incentive to not create trouble for students pointlessly |
21:13 | <@froztbyte> | Azash: yeah but finland is a weird little thing |
21:13 | <@froztbyte> | everything works because everyone buys in |
21:13 | <@froztbyte> | I'm still not quite sure why |
21:13 | <@Azash> | froztbyte: Our head of department has an algorithm named after him which makes us objectively the best |
21:13 | <@Azash> | :b |
21:13 | <@froztbyte> | haha |
21:14 | <@Azash> | https://en.wikipedia.org/wiki/Ukkonen%27s_algorithm |
21:14 | <@Tarinaky> | And either Australia or Micronations depending on whether you define 'western' in terms of economy or geography :p |
21:14 | <@Azash> | TL;DR "The naive implementation for generating a suffix tree requires O(n2) or even O(n3) time, where n is the length of the string. By exploiting a number of algorithmic techniques, Ukkonen reduced this to O(n) (linear) time, for constant-size alphabets, and O(n log n) in general." |
21:16 | < RichyB> | Azash: I took an algorithms class ages back where suffix trees were used for a few different purposes. The lecturer did his best to impart knowledge of as many interesting algorithms as he could fit into our heads. On the subject of Ukkonen's algorithm, he did not try but instead handwaved it as "There exists a terrifically clever and horrendously painful to follow algorithm which I won't teach you that makes the problem of building a suffix tree |
21:16 | < RichyB> | go away because it's linear..." ;) |
21:16 | <@Azash> | Haha |
21:16 | <@Azash> | I saw an explanation on SO for it but I readily admit I wasn't up to understanding it |
21:17 | | * TheWatcher blinks at this code |
21:18 | <@TheWatcher> | Horay for inline asm with no actual documentation of what the fuck it is doing |
21:19 | <@Azash> | TheWatcher: "Oh well I won't comment this, it's obvious enough" |
21:19 | <@TheWatcher> | No comment. Literally. |
21:19 | <@Azash> | RichyB: http://stackoverflow.com/questions/9452701/ukkonens-suffix-tree-algorithm-in-pla in-english/9513423#9513423 |
21:20 | <@Tamber> | TW: Could be worse. /* Magic. */ |
21:20 | <@Tamber> | :) |
21:21 | < RichyB> | Azash: cool, thank you. |
21:21 | < Harrower> | //To whoever has to maintain my code: I kludged this together on short notice |
21:21 | < Harrower> | //because I was the only person available at the time and we were on a deadline. Sorry. |
21:22 | <@Azash> | Tamber: Don't forget the classic // what the fuck? |
21:23 | <@Tamber> | :D |
21:24 | <@Namegduf> | My favourite is one I ran into in a production codebase: // the line used to be here |
21:24 | <@Namegduf> | No one remembered anymore why it was added. |
21:24 | <@Tamber> | But no-one wanted to remove it, in case it was important? |
21:24 | <@Namegduf> | No, it was removed. |
21:24 | <@Namegduf> | XD |
21:27 | <@Tarinaky> | Couldn't you use Version Control? |
21:27 | <@Tarinaky> | Or are blame files not common? |
21:28 | <&ToxicFrog> | Blame...files? |
21:29 | <@Namegduf> | I think it predated the introduction of the code to version control. |
21:30 | <@Namegduf> | We knew who added it, it's just they didn't remember why it was there anymore either. |
21:30 | <@Namegduf> | XD |
21:32 | <@Tarinaky> | ToxicFrog: git blame. |
21:33 | <@gnolam> | "We already know we have a git to blame, we want to know who!" |
21:34 | <@Tarinaky> | I think it tells you which commit created a line. |
21:34 | <@Tarinaky> | I'd have to check though. |
21:34 | <@Tarinaky> | (As well as the author) |
21:35 | <&ToxicFrog> | Tarinaky: I'm entirely familiar with blame features, but generally the system generates that on demand, there isn't a separate "blame file". |
21:35 | <@Tarinaky> | I've heard it referred to as a blame file. |
21:36 | <&ToxicFrog> | Bizarre. |
21:36 | <@Tarinaky> | I confess, I tend to use the web-interface of Github instead. |
21:36 | <&ToxicFrog> | I wonder what the etymology is there. |
21:36 | <@Tarinaky> | Maybe the output of git blame? |
21:36 | <@Tarinaky> | To create a file... |
21:36 | <&ToxicFrog> | Old version control systems where the history was stored entirely in the header comments? If you wanted blame-style info, you'd need a separate "shadow file" with all the blame information in it. |
21:36 | <@Tarinaky> | i dunno. Maybe I'm just being a newb. |
21:37 | <&ToxicFrog> | And then it would get out of sync with the actual history! It would be awesome. |
21:37 | < RichyB> | The etymology could be going the other direction entirely. |
21:38 | < RichyB> | If you hit "C-x v g" in Emacs, it'll open up a new buffer, read the output of "git blame" or "svn blame" into it and colourise it for you to peruse. |
21:39 | < RichyB> | Perhaps the etymology of "blame file" comes from running something like "svn blame foo.c@915 > foo.c.915" followed by "less foo.c.915" |
21:39 | <@Tarinaky> | @? |
21:39 | <@Tarinaky> | Oh, line number. |
21:39 | <@Tarinaky> | DEEERP |
21:40 | < RichyB> | I was thinking revision number. I might have the wrong syntax. |
21:40 | <@Tarinaky> | I'm not familiar with svn. |
21:46 | <&ToxicFrog> | In svn, foo@123 is revision number, yes. |
21:46 | <&ToxicFrog> | p4 does foo#123, IIRC. |
21:46 | <&ToxicFrog> | Line number is foo:123 in pretty much everything. |
21:47 | < RichyB> | Tarinaky: huh. Do you know any of the VCSes that are better than it? |
21:48 | <&ToxicFrog> | (although in p4 rev number is per-file) |
21:49 | < RichyB> | Given how atrociously poorly per-file revs worked in CVS, I don't like the sound of that. |
21:49 | < [R]> | Heh |
21:50 | < [R]> | Did you know that CVS was based on a single-file version-control system? |
21:50 | < [R]> | Originally it was just a hack to make it "support" multiple files at once. |
21:51 | <&ToxicFrog> | RichyB: well, it's both, really |
21:51 | <&ToxicFrog> | foo@123 is "the state of file foo as of changelist 123", and foo#123 is "the 123rd recorded revision of file foo" |
21:52 | < RichyB> | Oh cool, that sounds genuinely helpful. |
21:52 | <&ToxicFrog> | Which is primarily useful for expressing things like "the Nth version of this file" without needing to care what CL the file was created/modified in. |
21:52 | < RichyB> | [R]: are you sure you didn't mean single user VCS? |
21:52 | < [R]> | Yes |
21:52 | < RichyB> | It's called "RCS" and a copy of it ships in the base installation of OpenBSD. |
21:52 | < RichyB> | AIUI CVS does not have better support for multiple files than RCS does, only multiple people attempting to edit the same files. |
21:53 | <&ToxicFrog> | It is. p4 has a lot of really horrible flaws but that is one nice feature. |
21:53 | < [R]> | Then I misread |
21:53 | | * [R] hasn't used either CVS or RCS ever |
21:53 | <&ToxicFrog> | Keep it that way~ |
21:54 | < [R]> | Yeah |
21:54 | < [R]> | Anyone used Bazaar here? |
21:54 | < RichyB> | CVS has a separate rev no for every file, there's no linking of different files' rev nos except that sometimes they'll coincidentally have similar timestamps. |
21:54 | <@froztbyte> | a little bit |
21:54 | < [R]> | Apparently it's not dead yet |
21:54 | <&ToxicFrog> | Only for checking out projects that use it. |
21:54 | < RichyB> | Kill it kill it kill it kill it kill it. |
21:54 | <@froztbyte> | launchpad runs on bazaar |
21:54 | <&ToxicFrog> | I've never actually used it for anything. |
21:54 | <@TheWatcher> | TF: I don't know, I think that everyone should try CVS and RCS once, just to see what they should never use again >.> |
21:54 | < RichyB> | The world has enough DVCSes already. What the Hell's the point of one more that doesn't even do anything interesting supposed to be? |
21:55 | <@froztbyte> | TheWatcher: amen |
21:55 | <@froztbyte> | that said, I'm sad that git won the popularity contest :/ |
21:55 | <@TheWatcher> | (fuckit, throw SVN in there too) |
21:55 | <@Tamber> | I've attempted to use CVS just for anonymous checkouts. Never, ever, ever again, please? ;_; |
21:56 | < RichyB> | TheWatcher: eh, there are still legitimate use-cases for svn over git. |
21:56 | <&ToxicFrog> | RichyB: bzr originated as a replacement for baz, a version control system that predates both git and hg |
21:57 | <&ToxicFrog> | At the time, there were not, in fact, enough DVCSes. |
21:57 | < RichyB> | Not many, but some. SVN is legitimately superios mostly in places like game and film studios where you have things like big 3DSmax or Maya files that have no feasible merging mechanism & where your only recourse is centralised locking. |
21:58 | <@Namegduf> | SVN doesn't do locking. |
21:58 | <@froztbyte> | RichyB: I was chatting to glyph about that at some point |
21:58 | < RichyB> | ToxicFrog: fair enough, but that does not excuse Launchpad for not jumping to any of the superior alternatives. |
21:58 | <@froztbyte> | he knows of a couple of things which are actually excellent in that kind of usecase |
21:58 | < RichyB> | Namegduf: yes it does. |
21:59 | <@froztbyte> | I didn't too extensively investigate how it works, but yeah |
21:59 | < RichyB> | froztbyte: intriguing. |
21:59 | <&ToxicFrog> | Your options were DARCS (still very early in development) or baz/arch, and that's pretty much it - and bzr was specifically created to be a testbed for new baz features that eventually supplanted it entirely. |
21:59 | <&ToxicFrog> | And Launchpad picked bzr because they funded its development. |
21:59 | <@froztbyte> | RichyB: afaict the clientelle for that kind of software is "aeronautics industries, and the like" |
21:59 | <@froztbyte> | I don't remember the name now, though :/ |
22:00 | <&ToxicFrog> | Which is to say, Canonical did. |
22:00 | < RichyB> | ToxicFrog: great. The situation has substantially improved since then. Developing bzr is a sunk cost. Continuing to insist on it is piling more money into a hole in the ground. |
22:00 | <@Namegduf> | Hmm, looks like they added it as an optional feature a while after original release. |
22:01 | < RichyB> | Namegduf: yeah, svn's concurrency control is optimistic by default but they added pessimistic locking too. OTOH, pessimistic concurrency control doesn't even begin to make sense in Git's world. |
22:02 | <&ToxicFrog> | RichyB: well, yeah, they should probably change now, but that's not what you were originally complaining about, you were asking why they picked it in the first place. |
22:02 | <&ToxicFrog> | (oh wait, no, you had DARCS, arch, or BitKeeepaahahahahahahahahahahahaha) |
22:02 | < RichyB> | ToxicFrog: no, that's not what I meant and I didn't think it was what I said. |
22:02 | < RichyB> | ("optimistic concurrency" = "go blithely ahead assuming that no conflicts will occur, when one does, merge files by hand") |
22:03 | < RichyB> | ("pessimistic concurrency control" = "put a sock on the doorknob so that everyone else knows not to try going in there") |
22:03 | <&ToxicFrog> | Re locking and large binaries - p4 is actually really popular in that space, because it handles binaries (and large repos in general) well, and uses pessimistic locking. |
22:03 | < RichyB> | By default? |
22:05 | < RichyB> | Pessimistic by default for code sounds dangerous after having heard dozens of horror stories about people accidentally leaving files locked while they're on holiday, in bullshit pessimistic VCS's like MS Source(Un)Safe |
22:07 | < [R]> | Did they fix that VSS bug where it required a world-writable CIFS store to save too? |
22:07 | < RichyB> | I assume that Microsoft followed their usual strategy and EOL'd the product instead of fixing any of the bugs. |
22:08 | < [R]> | Fair enough |
22:09 | < RichyB> | Never had the displeasure of using it, just read stories about it on the blogs of oldschool Microsoft-only shops (why in the name of Cthulhu...?) like Fog Creek. |
22:21 | <@Tarinaky> | RichyB: I've always used git. |
22:22 | <@Tarinaky> | I've never had need to learn or use anything else beyond downloading/checkout out/cloning/insert verb here.. |
22:25 | < RichyB> | Tarinaky: I'm actively glad to hear that. ? |
22:25 | <@Tarinaky> | I wasn't sure what the purpose of your question was. |
22:27 | <@Tarinaky> | But yeah. I pretty much went straight from 'archive snapshots of the source tree' to git ina single step without learning CVS or SVN. |
22:27 | <@Tarinaky> | And yes, I'm embaressed that I used to do that. |
22:29 | | * [R] tried SVN |
22:29 | < [R]> | Found it stupid heavy to setup |
22:29 | < [R]> | Tried git years later, found it stupid easy. |
22:30 | <@Tamber> | I went straight from "Commenting out blocks of code" to git for my own stuff. I doubt I'll use anything else, mostly due to inertia rather than on any particular merits; other than "not having to rely on a [centralised] server", anyway. But then, I'm not using any Dark Magic features, or leading any important projects. |
22:30 | <@gnolam> | SVN? Hard to setup? |
22:31 | <@gnolam> | Not my experience. |
22:31 | <&ToxicFrog> | Step 1: install apache |
22:32 | <@Tamber> | :tears: |
22:32 | <&ToxicFrog> | That right there makes it orders of magnitude more of an asspain to set up than git or hg. |
22:32 | <@gnolam> | You don't need apache just to set up an SVN server. |
22:33 | | * [R] went the apache route |
22:33 | | * [R] followed a tutorial |
22:33 | <&ToxicFrog> | RichyB: we may be using different defintition of "pessimistic". Files must be explicitly unlocked before you can edit them. Multiple people can unlock the same file, but this is a warning, and the administrator can disable this entirely (either globally or per tree) |
22:33 | < RichyB> | ToxicFrog: that's a completely benign implementation of pessimism. |
22:33 | <&ToxicFrog> | gnolam: last time I used svn, the options were apache or svnserve, and svnserve didn't support everything. |
22:34 | <@gnolam> | Define "support everything". |
22:34 | < RichyB> | The bullshit that VSS apparently did was that it had IDE integration, wouldn't let you open files to edit them if some other developer had tried to. |
22:34 | <&ToxicFrog> | It may be better now, but if so this happened after I switched entirely to git, which requires exactly zero bullshit faffing about with daemons. |
22:34 | < [R]> | I think I was 16 when I tried? Which would be ~2003 |
22:35 | | Vornicus [vorn@ServerAdministrator.Nightstar.Net] has joined #code |
22:35 | | mode/#code [+qo Vornicus Vornicus] by ChanServ |
22:35 | <&ToxicFrog> | gnolam: I don't remember, this was in 2004. I just remember wanting version control adn svnserve not doing what I needed, and being told that a full SVN install on apache would. |
22:35 | < RichyB> | So e.g. Bob opens up a bunch of files in Visual C++, peers at them for half an hour, decides that he's stuck, turns off his computer and leaves. |
22:35 | <&ToxicFrog> | And it did, but seriously, fuck that noise. |
22:35 | <&ToxicFrog> | RichyB: that's kind of terrible |
22:35 | < RichyB> | While Bob's on holiday, Alice comes along and attempts to fix the same bug that he was staring at, but now she has to get a network admin to override Bob's locks because he can't because he's left. |
22:36 | | Harrower is now known as ErikMesoy|sleep |
22:38 | | Vornicus [vorn@ServerAdministrator.Nightstar.Net] has quit [Operation timed out] |
22:40 | | Vornicus [vorn@ServerAdministrator.Nightstar.Net] has joined #code |
22:40 | | mode/#code [+qo Vornicus Vornicus] by ChanServ |
22:51 | | McMartin [mcmartin@Nightstar-c2f37ed0.pltn13.sbcglobal.net] has quit [Ping timeout: 121 seconds] |
22:53 | | McMartin [mcmartin@Nightstar-77da9fec.pltn13.sbcglobal.net] has joined #code |
22:53 | | mode/#code [+ao McMartin McMartin] by ChanServ |
23:06 | | Karono [Karono@Nightstar-03f66622.optusnet.com.au] has joined #code |
23:19 | | Vornicus [vorn@ServerAdministrator.Nightstar.Net] has quit [Operation timed out] |
23:20 | | Vornicus [vorn@ServerAdministrator.Nightstar.Net] has joined #code |
23:20 | | mode/#code [+qo Vornicus Vornicus] by ChanServ |
23:38 | | Karono [Karono@Nightstar-03f66622.optusnet.com.au] has quit [Client exited] |
--- Log closed Wed Jun 26 00:00:01 2013 |