--- Log opened Sat Mar 06 00:00:04 2010 |
--- Day changed Sat Mar 06 2010 |
00:00 | < celticminstrel> | There's no chance that a terminal would have 256 colours, right? |
00:00 | < Tarinaky> | The Touch Book looks really cool >.< |
00:00 | < Tarinaky> | I wants one preciousssss~ |
00:00 | < Namegduf> | Touch Book? |
00:01 | < Tarinaky> | http://www.alwaysinnovating.com/touchbook/ |
00:05 | < Namegduf> | That does look nice. |
00:11 | < Alek> | hee |
00:11 | < Alek> | Mozilla's new browser is codenamed Fennec. |
00:11 | < Alek> | that's another species of fox. :P |
00:12 | < Alek> | anyway. nice netbook, but I'd still prefer a regular lappy and desktop. >_> |
00:17 | < Namegduf> | A regular laptop isn't really competitive with a netbook, a netbook is kinda like the new smartphones approached from the other side. |
00:18 | < Namegduf> | But I can understand not seeing a need for something in that area with a not-too-big laptop. |
00:19 | < Tarinaky> | I have a dumb mobile phone because I can't do what I want on a smartphone. |
00:19 | < Namegduf> | I do too. |
00:19 | < Namegduf> | 9" is small enough to fit in my coat pocket, though, and retain 70-80% of the use of a laptop (big shortfalls are the inability to write Java (because I must work in it) and input rate. |
00:19 | < Alek> | well, I don't really have any use for a smartphone or netbook just yet. |
00:19 | < Alek> | I DO need a laptop. |
00:19 | < Tarinaky> | A tablet on the other hand could. |
00:19 | < Namegduf> | So I can randomly wander out and work outside when I feel like it. |
00:19 | < Alek> | or a tablet. a BIG one. |
00:19 | < Namegduf> | I'd find a tablet useless, myself. |
00:19 | < Tarinaky> | Namegduf: I think they have Java support on there. |
00:19 | < Tarinaky> | Namegduf: It's mentioned in the FAQ. |
00:19 | < Namegduf> | Tarinaky: Er, it runs Linux |
00:20 | < Namegduf> | The reason I don't dev Java is because I do my dev on it remotely via a server, because I don't have the netbook itself backed up. |
00:20 | < Namegduf> | And I can't take the RAM hit on the server. |
00:21 | < Namegduf> | (Not so much Java being vast as the server being primarily for other purposes, with my personal use being restricted to a huge screen connected to SSH sessions to elsewhere) |
00:21 | < Tarinaky> | I don't understand what you're saying :/ |
00:22 | < Tarinaky> | You do dev in Java or you don't? |
00:22 | < Tarinaky> | o.o |
00:22 | < Namegduf> | Tarinaky: It runs Linux, so it can always run Java; the reason I don't has to do with my workflow rather than limitations of the device itself. |
00:22 | < Namegduf> | I write Java (because I must), but not using it. |
00:22 | < Tarinaky> | Ah. |
00:23 | < Namegduf> | Sometimes I SSH into my other laptop (which is 17", huge, and I treat as an easier-to-relocate desktop, basically) |
00:23 | < Namegduf> | For that. |
00:23 | < Namegduf> | But only if I've left it on and with SSH local port forwarding to give me the abiltiy to actually connect to it, because it's behind an annoying firewall. |
00:23 | < Tarinaky> | Well. TBH I want to be able to see it in a store tbh. |
00:24 | < Namegduf> | That'd be neat. |
00:24 | < Tarinaky> | So I can pick it up and play with it before I buy >.> |
00:24 | < Namegduf> | I ordered an EEEPC 901 |
00:24 | < Tarinaky> | Because I R fussy. Lol. |
00:24 | < Namegduf> | Which so far as I can tell is the best possible thing for me that's actually on sale. |
00:24 | < Tarinaky> | But hey, if I wasn't fussy I'd just have an iPhone. |
00:24 | < Namegduf> | An iPhone is useless to me. |
00:25 | < Namegduf> | Or near useless. |
00:25 | < Namegduf> | And ridiculously expensive. |
00:25 | < Tarinaky> | Yup. |
00:26 | < Namegduf> | My general workflow revolves around logging in via pam_ssh, which decrypts my private key, and then using that to get one-click attach to my remote screen. |
00:26 | < Namegduf> | Through autossh, so if it drops, it at least reattaches, although often to the wrong window. |
00:26 | < Namegduf> | Which means my IRC client connection lives through suspend, bad wifi signal, etc. |
00:26 | < Namegduf> | I doubt I could do that on the iPhone. |
00:27 | < Tarinaky> | TBH I don't have a real job so a major selling point for me is I could play Roguelikes on the go on it. |
00:28 | < Tarinaky> | And my current laptop was so heavy I gave up on it. |
00:28 | < Tarinaky> | (It was an old laptop) |
00:29 | < Namegduf> | Hehe. |
00:29 | < Namegduf> | I do that, too. |
00:30 | < Namegduf> | My screen session has my IRC client, my connection to a NetHack server, and my university notes. |
00:30 | < Namegduf> | If I want another, I just open another, so I can NetHack while I take notes and switch back and forth if they say something useful. |
00:30 | < Namegduf> | Or so I can code while I note, or something. |
00:31 | < Tarinaky> | ATM I just use the lab machines for my fix. |
00:31 | < Namegduf> | A tablet would be pretty useless for me because I couldn't keep up the typing rate for note-taking. |
00:31 | < Tarinaky> | If I had gaming in lectures I'd never take notes though :/ |
00:31 | < Namegduf> | I have gaming in lectures because my programming trivia means they have a tendency to spend a lecture carefully going over, in less detail, something I already know. |
00:32 | < Tarinaky> | I do Physics. |
00:32 | < Tarinaky> | If I blink I'll miss something important. |
00:32 | < Namegduf> | Lectures like that I spend making notes all the time. |
00:32 | < Namegduf> | And I have some. |
00:33 | < Namegduf> | But, for instance, I understand next year will include detailed explanation of pointers for the poor sods who learned programming through Python |
00:33 | < Namegduf> | And Java |
00:33 | < Tarinaky> | Compound the issue with the fact that the lecturers sometimes have very thick european accents. |
00:33 | < Tarinaky> | L. |
00:33 | < Namegduf> | And thus have a lot of unlearning to do. |
00:33 | < Tarinaky> | *:/ |
00:33 | < Namegduf> | Or, rather, a lot of "learning in more detail" to do. |
00:33 | < Tarinaky> | People can live without pointers? |
00:33 | < Tarinaky> | How? |
00:33 | < Tarinaky> | o.o |
00:34 | | * Tarinaky never ventures far from the cave of C++ so anything higher level than that tends to scare and confuse him. |
00:34 | < Namegduf> | So those lectures, well. |
00:34 | < Namegduf> | I kinda should probably show up |
00:34 | < Namegduf> | I mean, I have very detailed, more detailed than the lecture, even, course notes, they're required at this university to be handed out, but it's a good idea to show up and be ready to note down anything at all I don't already know. |
00:35 | < Namegduf> | But that kind of thing is going to be a "play NetHack or work on unrelated code" time, mostly. |
00:35 | < McMartin> | Tarinaky: It's possible to live without assignable variables. ^_^ |
00:36 | < McMartin> | More seriously, "no pointers" usually means "references only", which actually means "no pointer *arithmetic*" |
00:36 | < Namegduf> | Or dereferencing, or more importantly, a real understanding of what a reference or pointer is. |
00:36 | < McMartin> | This is actually extremely easy to deal with, assuming your language's support for arrays and structures isn't utter shit (which C's is, and which C++ maintains backcompat with) |
00:37 | | You're now known as TheWatcher[T-2] |
00:37 | < McMartin> | Nah, classical Pascal has no pointer arithmetic but also has an explicit deref operator. |
00:37 | < Tarinaky> | Ah. Yeah. If you have references everything is alright. |
00:37 | < McMartin> | If there are no unboxed references (viz., Java), "." *is* the dereference operator. |
00:37 | < Namegduf> | McMartin: You said "usually" |
00:37 | < McMartin> | C# does inference to decide what to do, IIRC, which I imagine would be a nightmare. |
00:38 | < Namegduf> | I also said "without pointers", not "without pointer arithmetic" |
00:38 | < Namegduf> | I think dereferencing is the important part for actually understanding what pointers *are*. |
00:38 | < McMartin> | I think that depends a lot on where they came from. |
00:39 | < McMartin> | If their first language was a LISP dialect, my explanation of what pointers are would be a lot different from if it were Java, and again if it were "brain-dead subset of C". |
00:39 | < Namegduf> | Python, then Java. |
00:39 | | You're now known as TheWatcher[zZzZ] |
00:40 | < McMartin> | Then they've done dereferencing before. |
00:40 | < Namegduf> | Nope-or not with any real understanding of WHAT they're doing. |
00:40 | < McMartin> | A full understanding will require you to teach them about virtual memory and TLBs~ |
00:41 | < Tarinaky> | "brain-dead subset"? |
00:41 | < McMartin> | Tarinaky: C really can't be used without pointers. |
00:41 | < Namegduf> | McMartin: That's awesome, because that's happening in the architecture part. |
00:41 | < Namegduf> | At some point, anyway, I think. |
00:41 | < McMartin> | So if they've only learned the bit of C that can be done without pointers, then you haven't finished Programming 101 regardless of what language you're actually using. |
00:42 | < Namegduf> | Right. |
00:42 | < McMartin> | I just don't have this "it's a raw virtual address, and you must accept this internally!" fetish Namegduf seems to |
00:42 | < Tarinaky> | McMartin: Ah right. Wasn't sure what you meant by braindead. |
00:42 | < Namegduf> | ? |
00:42 | < Namegduf> | You're seriously suggesting the average person introduced to programming through Python and Java for the first time |
00:42 | < Namegduf> | With cursory discussion of what references are |
00:43 | < Namegduf> | Is going to understand "pointers" properly? |
00:43 | < McMartin> | I'm saying that after a 12-week course, they will, in fact, have a grasp of why these two Java methods behave differently. |
00:43 | < Namegduf> | Maybe not "average", but "average programmer". |
00:43 | < McMartin> | void foo(int a) { a = 3; } |
00:43 | | Rhamphoryncus [rhamph@Nightstar-8931f88f.abhsia.telus.net] has joined #code |
00:43 | < McMartin> | void foo(MyIntCell a) { a.i = 3; } |
00:44 | < McMartin> | I would expect someone who has completed a first-quarter course in Java to be able to tell me what those functions did. Viz, in the first case, nothing. |
00:44 | < McMartin> | In order to be able to tell me this, they have to understand references. |
00:44 | < Tarinaky> | Incidentally. On the subject of Memory. When is it appropriate to use an associative container instead of pointers? I know I can use associative containers to allow me to save my program's state to a file including pointers/references. But at exactly what point in design would I be going over the top? |
00:44 | < McMartin> | Tarinaky: Never write a raw pointer out, ever. |
00:44 | < Namegduf> | McMartin: "No, they don't." |
00:45 | < McMartin> | Then their teachers have failed them. |
00:45 | < Namegduf> | They have to understand the rules of variables and how they work. They don't really have to understand *why*. |
00:45 | < Tarinaky> | McMartin: Oh I got that. I meant more from an abstraction/generalisation standpoint. :/ |
00:45 | < Tarinaky> | When looking at a mostly empty project when should I think it's a good idea to proof myself in this way and when shouldn't I >.> |
00:46 | < McMartin> | Namegduf: Can you explain 'why' in a way acceptable to you without using the words 'pointer' or 'address'? |
00:46 | < Namegduf> | McMartin: Not really, no. |
00:47 | < Namegduf> | McMartin: I think you're misunderstanding this, though. |
00:47 | < McMartin> | Namegduf: I think I am, which is what I'm trying to get at |
00:47 | < McMartin> | There are at least two places of confusino |
00:47 | < McMartin> | *confusion |
00:47 | < McMartin> | (a) what qualifies as a 101 class |
00:47 | < Namegduf> | Let me put it this way: The university has lectures on pointers. I am going to find them boring as hell and play NetHack. |
00:47 | < Namegduf> | This is because *they* at least feel it necessary because most of the students have never seen a line of code before this year, and the architecture and programming lectures at the start are quite distant. |
00:47 | < McMartin> | (b) Whether memory models are covered at all |
00:48 | < McMartin> | Right |
00:48 | < Tarinaky> | From my playing around and understanding I know that using associative containers makes type checking a complete pain in the arse though. |
00:48 | < McMartin> | Tarinaky: Target language? |
00:48 | < Namegduf> | I've commented that teaching C as an extension to the architecture part would actually be a really good idea. |
00:48 | < Tarinaky> | McMartin: C/C++. |
00:48 | < McMartin> | Namegduf: C is great for architecture |
00:48 | < McMartin> | The thing is, my curriculum started with Scheme. |
00:49 | < McMartin> | Before we ever formally studied anything resembling a data structure, we were all quite adept at drawing abstract memory models with no explicit reference to von Neumann stored-program ma=emory |
00:49 | | * Bobsentme coughs politely. |
00:49 | < McMartin> | You can map out a reference graph without referencing memory model at all, and that sort of thing is how I'd expect references to be taught. |
00:50 | < McMartin> | The jump from references to pointers is, AFAICT, purely "You know references? So, memory is actually like a giant linear array, and you can do references by storing the integer that is the offset of that array." End of pointer lecture, and the fruits of the results of that go into the lab. |
00:50 | < Bobsentme> | Yours truly is a beginning programmer. |
00:50 | < Namegduf> | McMartin: See, that stuff hasn't been done. |
00:51 | < McMartin> | OK. I think I'd be directing my ire elsewhere, then. |
00:51 | < McMartin> | Tarinaky: I don't think I fully understand your alternatives, then. |
00:51 | < Bobsentme> | Pointers, as simple as they are, scared the hell out of my fellow c/c++ students. |
00:52 | < Tarinaky> | It's not so much alternatives. A friend of mine gave me some advice on when to use singletons and when not-to a few months back. |
00:52 | < McMartin> | Well, with very few exceptions, "the fruits thereof" are actually "buffer-overflow exploits" |
00:52 | < McMartin> | And memory-mapped I/O, but that's a lot rarer these days |
00:52 | < McMartin> | *at the app level |
00:53 | < McMartin> | Tarinaky: What do singletons have to do with map vs. pointers (assuming here "pointers" is really shorthand for "hand-coded special purpose recursive data structure")? |
00:53 | < Tarinaky> | I... dunno. I'm rambling a bit. |
00:54 | < Tarinaky> | Sorry >.< |
00:54 | < McMartin> | Tarinaky: Well, once you decide what your question is I might be able to help |
00:54 | < McMartin> | Bobsentme: Well, see, this is why *my* preferred curriculum *starts* with abstract handle mechanics a la car/cdr, get them used to drawing arrows between memory cells, &c, and then show them how that's done at a machine level. |
00:54 | < Tarinaky> | One thing that flumouxes me a bit is how to handle polymorphism wrt associative containers of references. |
00:55 | < Namegduf> | I dislike the idea of car/cdr as a start |
00:55 | < Namegduf> | Because it has crap all to do with "how things actually work" |
00:55 | < Namegduf> | AND is complex. |
00:55 | < Namegduf> | If you're going to start a distance from "how things actually work", the only reason I've heard is "to better teach the concept of structuring and writing decent programs" |
00:55 | < Bobsentme> | Personally, I'd like to see at least *some* optimization put into courses. Because I've seen pages and pages of bad code, stacked on top of each other, to make the simples things work. |
00:55 | < Tarinaky> | Even just limiting myself to linear relationships - the RTTI doesn't seem powerful enough :/ |
00:56 | < Tarinaky> | Maybe I don't know enough about it, I dunno. |
00:56 | < Bobsentme> | bad code *snippets*. Sorry. |
00:56 | < McMartin> | I prefer to start from "shit you intend to get done", but the real reason Scheme was used is because the textbook we used used it as its example language. |
00:56 | < McMartin> | But either you start at math and move down to hardware, or you start at hardware and move up to math |
00:56 | < McMartin> | Either way, data structures and such are in the *middle*. |
00:56 | | AnnoDomini [annodomini@Nightstar-a71cf81d.adsl.tpnet.pl] has quit [[NS] Quit: AD cancels Use Computer: Fell asleep.] |
00:57 | < Bobsentme> | aye. |
00:57 | < McMartin> | We have a fundamental philosophical disagreement about how important "how things actually work under the surface" is; you clearly seem to think that you can't work properly at a high level of abstraction |
00:58 | < McMartin> | While I will insist that as long as your contracts are met by the lower levels, clients are not only permitted but obligated to work at that level. |
00:58 | < Tarinaky> | What's the most graceful way of handling derived classes and such? Since the main use I have is for storing things like creatures and the like. |
00:58 | < Tarinaky> | That a better question? |
00:58 | < McMartin> | A C programmer as a rule should not give a shit about paging; they should treat memory as a 2GB array if they're writing for x86. |
00:59 | < McMartin> | And for the vast majority of programmigng tasks, even that's lower level than it needs to be. |
00:59 | < McMartin> | Tarinaky: A much broader question, yeah. |
00:59 | < McMartin> | I actually don't like OO ontologies, so I'm not the best person to ask |
00:59 | < McMartin> | That said, "have as shallow an inheritance tree as you can get away with" is usually good advice. |
01:00 | < McMartin> | Don't add methods in child classes for something like this; have a master interface of virtual functions that will always be there and that comprise everything the top-level logic loops will care about. |
01:01 | < McMartin> | (Back at Namegduf: I get the impression my biases are in part because I've never had to deal with the kind of programming class that focuses on, if you well, where the braces and semicolons go as if this were actual course content.) |
01:01 | < Namegduf> | McMartin: It isn't so much that as "This is Hello World. This is conditionals. This is looping." |
01:02 | < Namegduf> | "Let's teach two languages so you get the concepts rather than the language." |
01:02 | < McMartin> | If you can phrase it like that, you're getting welded into place~ |
01:02 | < Namegduf> | Hmm? |
01:02 | < McMartin> | I think the scheme class didn't even get into looping as such. |
01:02 | < McMartin> | Because it falls out of, say, computing some function recursively. |
01:02 | < Namegduf> | That's because, yes. |
01:02 | < Namegduf> | Recursion was covered to. |
01:03 | < Namegduf> | *too. |
01:03 | < Namegduf> | (That was bad, my excuse is that I suddenly shifted about 75% of my attention to another window) |
01:03 | < McMartin> | More succinctly: Your idea of "what is actually going on" is instruction execution. Mine is something like "here we're computing the standard deviation of our arguments". |
01:04 | < McMartin> | Everything below that is "here's what the runtime is doing to execute our computation", and so on down the abstraction tree until you hit CMOS. |
01:04 | < Namegduf> | "here is what the runtime is doing" == "What is actually happening" |
01:04 | < Namegduf> | That is my idea of what is "actually" going on. |
01:05 | < McMartin> | Yes, this is the source of our differing worldviews. |
01:05 | < Namegduf> | I have a very... "based in reality" take on things. I start at what physically exists and work up. |
01:05 | < McMartin> | I object, if anything, to your contention that the runtime is reality. |
01:06 | < Namegduf> | The processor parsing and executing the instructions is. |
01:06 | < McMartin> | First because it tends to have several layers, and second because it lives on top of the OS services which live on top of hardware abstractions which could be microcode emulators for all we know or care. |
01:06 | | * Vornicus tends to think on a somewhat lower level than McM: "This function calculates standard deviation using the standard 1-pass algorithm." |
01:06 | < Namegduf> | If they're hardware abstractions, then it isn't actually what is happening. |
01:07 | < McMartin> | Namegduf: Sure, but then, to go back to the original point, "pointers" are themselves an abstraction to simulate a specific kind of flat-memory machine that does not actually exist. |
01:07 | < Namegduf> | My definition of what is actually happening is based on what is actually happening, although I forgive "plus or minus optimisations that don't change semantics", admittably. |
01:07 | < Namegduf> | I'm not sure what pointers have to do with this point. |
01:07 | | * Vornicus gives Namegduf an NES emulator running in Classic 68k mode on a PowerPC running MacOS X |
01:07 | < Namegduf> | You're taking a comment I made to explain why I play NetHack in lectures way too far. |
01:08 | < McMartin> | Yeah, we sorted that out earlier. |
01:08 | < Tarinaky> | We all agree that Namegduf plays Nethack during lectures. |
01:08 | < Namegduf> | XD |
01:08 | < McMartin> | Specifically, my idea of "they've been taught references already" was clearly much more comprehensive than it actually was. |
01:08 | < Namegduf> | Yeah. |
01:08 | < McMartin> | To which I then say "well, there's your problem" |
01:08 | < Tarinaky> | Now lets debate what his favourite class is. |
01:08 | < Namegduf> | Perhaps. |
01:09 | < McMartin> | 20th Century Pennsylvanian Experimental Philosophers, clearly. |
01:09 | < Namegduf> | I'm honestly of the view that the best place to start is the hardware, then up. |
01:09 | | * McMartin pours a 40 for Itzchak |
01:09 | < Namegduf> | Others seem to favour teaching the concept of telling things what to do, how, and how to do it robustly. |
01:09 | < Tarinaky> | Haven't there been studies that show that you either 'get' programming or you don't? |
01:09 | < Namegduf> | Yes. |
01:10 | < McMartin> | They're sufficiently fundamental, though, that I'm skeptical of the results |
01:10 | < McMartin> | Or rather, of the way they seem to eb used |
01:10 | < Namegduf> | I read about them online and a week later I was handed a familiar looking survey sheet. |
01:10 | <@Vornicus> | Nobody teaches math by starting with set theory. |
01:10 | < McMartin> | Vornicus: They don't start with the Peano postulates, either, though. |
01:10 | < Namegduf> | That's because set theory failed as a fundamental basis for mathematics. |
01:10 | < Namegduf> | As well. |
01:10 | < McMartin> | They start just assuming you have a decent idea of what the natural numbers are, because, well, you're four. |
01:10 | < McMartin> | You *do* have a decent idea of what the natural numbers are. |
01:10 | < Namegduf> | XD |
01:11 | < Namegduf> | I basically dislike teaching arbitrary abstract models instead of the real architecture of computers first. |
01:11 | < Namegduf> | Or, rather, more distant abstract models. |
01:11 | < McMartin> | Yeah, I was going to say, the lambda calculus is anything but arbitrary. |
01:12 | < McMartin> | If your goal is to, you know, compute things, then "these are functions" is actually the starting point. |
01:12 | < Namegduf> | Right. |
01:12 | < McMartin> | Then you get "things happen in order" from evaluation mechanics. |
01:12 | < Rhamphoryncus> | Those studies had to do with building a mental model of the memory that evolved with time |
01:12 | < Tarinaky> | One thing that was very odd - in AS Level Computing they covered neither the low-level/hardware or abstract/maths of programming. |
01:12 | < Rhamphoryncus> | The study didn't care *what* the model is, just so long as it was consistent through the test |
01:13 | < McMartin> | The reason those surveys made me skeptical is because it implies that university level people can't build a memory model of "things happen in order". |
01:13 | < Tarinaky> | That they did do was talk at you about Linked Lists and Binary Trees for four hours a week. |
01:13 | < McMartin> | I literally cannot comprehend how that works; it sounds like dyslexia or innumeracy but worse. |
01:13 | < McMartin> | Like they'd be finding each day a new source of wonders because once again their house key has fit into their lock, and not only that, it unlocked their door. |
01:13 | < Namegduf> | McMartin: I actually find that as a great explanation for people who cannot get imperative programming. |
01:14 | < Namegduf> | I think it's simpler than that, though. |
01:14 | < Rhamphoryncus> | McMartin: it's bizarre, and could be due to how the course is designed rather than the underlying concept, but it's an idea that's been around for a while |
01:14 | < McMartin> | Namegduf: And yet, the degree of inability to deal with reality it implies is not in evidence. |
01:14 | < Namegduf> | McMartin: The explanation I favour is that they're unable to accept arbitrary rules for such. |
01:14 | < McMartin> | Rhamphoryncus: Yes, it has. Usually as part of racist literature proving the inability of (insert ethnic group here) to be helped, so let them all rot |
01:14 | < Namegduf> | As in, they can understand a key because it's in their hand, and it fitting into a door "makes sense". |
01:14 | < Namegduf> | But they can't take arbitrary rules and follow them in order. |
01:14 | < Tarinaky> | Which was a little silly since you end up talking about serial records and tape and a general lack of understanding of how any of this applies outside the exam. |
01:15 | < McMartin> | Tarinaky: "AS"? |
01:15 | < Rhamphoryncus> | McMartin: no no, I mean in teaching programming it's been around for a while |
01:15 | < Tarinaky> | McMartin: Ages 16->17 |
01:15 | < Tarinaky> | 'Advanced Subsidiary' |
01:15 | < McMartin> | Rhamphoryncus: Yes; I'm saying it's a cousin logic. |
01:15 | < Rhamphoryncus> | It's not |
01:16 | < McMartin> | Tarinaky: As an American who graduated high school in 1996, I'm not actually familiar with that. I take it it's some kind of university prep-level course? |
01:16 | < Tarinaky> | McMartin: It's a British thing. |
01:16 | < McMartin> | Tarinaky: Oh, is this like A-levels but for something that isn't a "real" subject, then? |
01:16 | < Tarinaky> | McMartin: After we finish out GCSEs at 16 we either do vocational courses or Advanced Levels at a Sixth Form. |
01:16 | < Namegduf> | McMartin: Anyways, my view is basically... people that have no idea how the actual implementation works in a model that relates at least touchingly on the reality, or is at least equivalent to reality for optimisation purposes |
01:17 | < Namegduf> | Write really BAD code. |
01:17 | < Tarinaky> | McMartin: I did mine in Physics, Maths and Electronics :/ |
01:17 | < Tarinaky> | McMartin: Most definitions count those as 'real' I think... |
01:17 | < Namegduf> | Now, the answer here has been to totally ignore these things for the purpose of the programming course, but have the architecture component have a little psuedoassembly in it, as well as addressing modes and friends. |
01:17 | < McMartin> | Tarinaky: Well, OK, what I meant was more the "subsidiary", as in, "CS itself is not one" |
01:18 | < Tarinaky> | No. The subsidiary is because they're half of a full course. |
01:18 | < McMartin> | Ah. |
01:18 | < Tarinaky> | AS is the first year. A2 is the second. |
01:18 | < Rhamphoryncus> | Noticing that consistently half of every class never understands the material, even with one on one training, isn't racist. Noticing that a larger proportion of them are black, then claiming it must be genetic, and blocking all future black enrolment in order to boost pass rates, that's racist |
01:18 | < Namegduf> | But that's basically why I like a view that teaches as "close" to the real machine or an accurateish model of it as possible. |
01:18 | < Tarinaky> | In this case, AS Computing. |
01:19 | < Namegduf> | McMartin: I find the idea of writing in Lisp-like languages interesting, though. |
01:19 | < McMartin> | Tarinaky: That's fairly typical for computing courses, yeah. The assumption is that you already picked up the architecture-level programming on your own, because it was the late 80s and you had to do that to load up yoru games. |
01:19 | < McMartin> | Namegduf: It changes what "optimal" means, absolutely. |
01:19 | < Tarinaky> | This was ~2006. |
01:19 | | PinkFreud [WhyNot@NetworkAdministrator.Nightstar.Net] has quit [Client closed the connection] |
01:19 | < Tarinaky> | McMartin: I'm a young-un. |
01:19 | < McMartin> | Tarinaky: I believe you missed the bitter sarcasm there. |
01:19 | < McMartin> | It wasn't true in the mid-90s either. |
01:19 | < Tarinaky> | McMartin: I believe I did. |
01:19 | | PinkFreud [WhyNot@NetworkAdministrator.Nightstar.Net] has joined #code |
01:20 | < Namegduf> | I don't hugely like Lisp, mostly because the model seems so arbitrary, and the "neat solutions follow from restrictions" reminds me of the time I had to write a linked list iterator in a language without loops or arrays of any sort, only references (which is why I was using a linked list, actually) |
01:20 | < Namegduf> | i.e. yes, it's cool you can do fun things with restrictions, what's your point now? |
01:20 | < McMartin> | Lisp is actually a bad modern example because it actually *is* tied to hardware. Just old ones. |
01:21 | < McMartin> | CAR and CDR stand for Contents of Address/Decremented part of Register. |
01:21 | < Namegduf> | Yeah. |
01:21 | < Rhamphoryncus> | McMartin: just makes it that much more amusing |
01:21 | < McMartin> | So take SML instead, especially since it makes an effort to look like math and still has explicit sequencing. |
01:22 | < Namegduf> | Hmm, not familiar. |
01:22 | < McMartin> | The uglier dialect with the better compiler is OCaml. |
01:22 | < Tarinaky> | TBH I don't really know why they teach us C in my Physics course. |
01:22 | < McMartin> | Tarinaky: ... yeah, no. |
01:22 | < Namegduf> | That sounds stupid. |
01:22 | < McMartin> | You should be using Mathematica, Matlab, or Python depending on how many numbers are being crunched. |
01:22 | < McMartin> | And what the non-numbers are. |
01:23 | < Namegduf> | C is a wonderful way to understand how programming follows on from the underlying architecture, and has examples of even fun optimisations-that-don't-break-the-model in its implementation. |
01:23 | < Namegduf> | For Physics? |
01:23 | < Tarinaky> | I have a suspicion it's because the person who declares this to be the case is the lecturer who picked a fight with me for not declaring variables at the start of functions. |
01:23 | < Namegduf> | I don't see it. |
01:23 | < Tarinaky> | >.> <.< >.> |
01:23 | < Namegduf> | Ouch. |
01:23 | < McMartin> | "You know what Physicists should be worrying about when they're interpreting their data? NUMERICAL LIMITS AND FLOATING POINT INSTABILITY. This is an excellent idea." |
01:24 | < Tarinaky> | And, to be fair, there're projects in the University that do actually need to use C. |
01:24 | < Rhamphoryncus> | umm, I didn't think you could avoid dealing with floating point problems? Every language has that |
01:24 | < Tarinaky> | Like the undergraduate pico-satellite. |
01:25 | < Rhamphoryncus> | (unless that's not sarcastic..) |
01:25 | < Tarinaky> | McMartin: That'd be a valid point except they don't mention it. At all. |
01:25 | < Tarinaky> | There're only C-compilers available for the hardware on the undergrad pico-satellite so, yah. |
01:27 | < Tarinaky> | Except the people who're working on programming the thing are all failed/dropped-out CompSci students who know their way around a C-program anyway. So it's somewhat moot. |
01:27 | < McMartin> | And they're going to start getting wrong answers as soon as they subtract two similar numbers and then divide by them. |
01:31 | < Tarinaky> | They only teach braindead C until the second year too! |
01:31 | < Tarinaky> | I'm informed that the only people who understood pointers in the second year were the people who understood them before the second year. |
01:31 | < Tarinaky> | If that makes sense. |
01:32 | < Tarinaky> | Either way - my experience of compsci is marred by truely terribly course design. |
01:32 | < Tarinaky> | Sorry. I think I've finished whining now. |
01:52 | | Derakon [Derakon@Nightstar-5abd3ac9.ca.comcast.net] has joined #code |
01:52 | | mode/#code [+o Derakon] by Reiver |
01:52 | <@Vornicus> | ...okay, so, generating primes and counting digit repeats? Not gonna happen. |
01:52 | <@Derakon> | You know, there's something deliciously appropriate about naming your implementation of the Ackermann function "ack". |
01:54 | < Tarinaky> | McMartin: Who should I talk to about OOP here btw? |
01:54 | <@Derakon> | Tarinaky: how about the channel at large? |
01:54 | < Tarinaky> | Derakon: I did earlier :x |
01:54 | < McMartin> | Yeah, pretty much. |
01:54 | | * Vornicus thought McM was the guru on that, but he can answer some questions. |
01:55 | <@Derakon> | McM seems to have the best-stocked in-memory cache of OOP information. |
01:55 | < McMartin> | Vornicus: I explicitly disclaim Doing It Right, because I know full well I have a strong Functional accent. |
01:55 | <@Derakon> | But as far as general design goes, I think we have plenty of competent advisors here. |
01:55 | < Namegduf> | I need to do more functional stuff. |
01:56 | < McMartin> | Namegduf: If you want to also get stuff done, I suggest OCaml; if you want to bend your brain as hard as it goes, Haskell. |
01:56 | < Namegduf> | Hmm. |
01:56 | < Namegduf> | I've a very strong preference for imperative programming, but... it's a different enough view that it's useful. For that purpose, I should probably learn Haskell. |
01:56 | < Tarinaky> | With regard to using associative containers to reference objects (so the references can be written to a file) how do I get around the fact that I lose type information? |
01:57 | < Tarinaky> | This is in C++. |
01:57 | < Namegduf> | How are you writing the container to a file? |
01:57 | | * McMartin - meanwhile - is writing a bunch of code in NSIS. ;.; |
01:57 | < Tarinaky> | "Somehow." probably using fstream. |
01:58 | <@Derakon> | Tarinaky: the keyword you're looking for here is "serialization". |
01:58 | <@Derakon> | Here's Wikipedia on it: http://en.wikipedia.org/wiki/Serialization#C.2B.2B |
01:58 | <@Derakon> | I recommend making use of an existing library instead of rolling your own, as much as possible. |
01:59 | < Tarinaky> | I've gotten demos to work alright. |
01:59 | < Tarinaky> | It's just certain things I've not been able to figure out :/ |
01:59 | < McMartin> | I must anti-recommend boost::serialization because it's apparently very version-specific, so you can't update boost later on, even piecemeal, without breaking all your saves |
02:00 | < Tarinaky> | I'd also rather roll my own for educational reasons too :x |
02:00 | <@Derakon> | Heh, okay. |
02:01 | | * Tarinaky grows distrustful of black boxes >.> |
02:01 | <@Derakon> | Well, your basic problem is going to be one of string manipulation in C++, which is always a pain. |
02:02 | < Tarinaky> | TBH. I got the string manipulation part down. |
02:02 | <@Derakon> | I strongly anti-recommend using binary files. The space savings are not worth losing hand-editable files, especially since you can just wrap the whole shebang in a zip lib if you need to. |
02:02 | <@Derakon> | Tarinaky: okay, so do you need to store arbitrary data, or only specific known objects? |
02:03 | <@Derakon> | If the latter case, just dedicate a line to each field. |
02:03 | <@Derakon> | As long as you keep the order consistent you can save and load without too much trouble. |
02:03 | <@Vornicus> | Binary files are useful for very specific kinds of things. Video, Sound, Raster. |
02:04 | <@Vornicus> | But then you want to use established formats. |
02:04 | < Tarinaky> | The problem I have is where do I 'put' the data during execution. |
02:04 | < Tarinaky> | Rather than saving it as such. |
02:04 | <@Derakon> | Sorry? |
02:04 | <@Derakon> | You mean, what do you do with it once you've loaded it from the file? |
02:05 | < Tarinaky> | Sort of. |
02:05 | < Tarinaky> | I'm really bad at communicating myself, lol. |
02:06 | < Tarinaky> | The current method I've been using is to have a std::map<struct> which I can save/load by iterating through. |
02:06 | < Tarinaky> | What I'm not sure about is where is best to put that std::map in the program. |
02:07 | < Tarinaky> | Should I make it global/singleton? |
02:07 | < McMartin> | Hmm. |
02:07 | < Tarinaky> | Attach it to something else... |
02:07 | < Tarinaky> | That sort of thing. |
02:07 | < McMartin> | Oh, I get what you're asking now. |
02:07 | < McMartin> | Is this file totally unique, or do you imagine there being multiple such files eventually? (Like, if it were level data or something, or if you could have expansion packs) |
02:08 | < Tarinaky> | McMartin: I expect to have data files and save files. |
02:08 | <@Derakon> | http://pastebin.starforge.co.uk/137 |
02:08 | <@Derakon> | A very simple example of serialization/deserialization by hand in Python. |
02:08 | <@Derakon> | Should be readily adaptable to C++. |
02:09 | < Tarinaky> | Of course, me expecting what I need is difficult because I lack experience. Heh. |
02:10 | < Tarinaky> | Derakon: That's similar to what I had. |
02:11 | < Tarinaky> | Serialisation has also come up in other things as well though - like that GUI thingie I was having to do for my group lab thing. |
02:12 | < Tarinaky> | (The Microsoft libraries for it weren't included in the version of the IDE/Compiler the Uni had on the boxes I was using so I was having to wing it >.>) |
02:14 | < Tarinaky> | Anyway. The problem with using singleton/globals is that they'd have to reference each other. Since creatures might have weapons or whatever. |
02:14 | < Tarinaky> | Which breaks the rule I was suggested for when to use singletons and when not to. |
02:17 | < McMartin> | I think that's a level confusion. |
02:17 | < McMartin> | The map can be a singleton. |
02:17 | < McMartin> | The things in the map aren't necessarily. |
02:18 | < Tarinaky> | Problem is though - do I then store the contents of the data files in the map singleton? |
02:19 | <@Derakon> | How dynamic are these contents? |
02:19 | < McMartin> | Once you've built your structure you can probably throw the file contents proper away. |
02:19 | < Tarinaky> | Since the save file says that there'd be a creature of a given type in a set of coordinates... the data file specifies what a generic creature of that type 'looks' like. |
02:19 | <@Derakon> | Mm...never mind, don't answer my question. |
02:20 | < Tarinaky> | So it'd be needed for spawning new things. |
02:20 | < Tarinaky> | :x |
02:20 | < Tarinaky> | At least, that's how I think it'd works. |
02:20 | < Tarinaky> | *work |
02:21 | <@Derakon> | Here, this is an entry in the monsters.txt file for Angband: http://pastebin.starforge.co.uk/138 |
02:21 | <@Derakon> | I wouldn't really recommend it as a file format, but it'll give you some idea of how this can work. |
02:21 | < celticminstrel> | Rhamphoryncus: There are infinite-precision floating-point numbers, though I know no language that uses them as the basic float type. |
02:21 | <@Derakon> | monsters.txt has hundreds of entries, one for each type of monster. They each have an ID (in this case, 7), and can be referred to as such. |
02:21 | <@Derakon> | Er, by such. |
02:22 | < Tarinaky> | Derakon: I understand that. |
02:22 | <@Derakon> | So your savefile could just say "A monster of type 7 is here". |
02:22 | < Tarinaky> | Derakon: At minimum it'd need to store an inventory/equipment list ontop of that. |
02:23 | < Tarinaky> | A group of punks might all have the same stats but half of them have SMGs, two have shotguns and the rest have pistols. |
02:23 | <@Derakon> | Okay, so that can be stored as an adjunct to the ID in the savefile. |
02:23 | < Tarinaky> | Yeah. |
02:24 | | Serah [Z@26ECB6.A4B64C.298B52.D80DA0] has quit [Ping timeout: 121 seconds] |
02:24 | < Tarinaky> | But this isn't the problem |
02:24 | <@Derakon> | When you load the savefile, you read the monster's inventory, and pass that to the monster constructor. |
02:24 | <@Vornicus> | Most of the time though you don't want to use infinite-precision numbers. If you do want Extreme Precision, you want to use an actual algebraic number type. |
02:24 | < Rhamphoryncus> | celticminstrel: I know of user-defined precision, which can be quite large. I've never heard of infinite precision though, and can't comprehend how to do it. The closest I know of is symbolic evaluation, which treats pi as an entity rather than a value |
02:24 | < Tarinaky> | The problem is. Where do I put the information that says what a monster of type 7 looks like in the program itself? |
02:24 | <@Derakon> | Tarinaky: when you start up the program, you open monsters.txt and read it into an array or other container. |
02:25 | <@Derakon> | You can then reference that container later when you need to look up stats on a given monster type. |
02:25 | < Tarinaky> | Curiously enough that compiler book really helped with working out how the serialised version of the data should look. |
02:25 | < Tarinaky> | Derakon: Yes. But where do I put that container? |
02:25 | < McMartin> | Tarinaky: In C++, any global that's complex enough to be represented as a class should always be done as a singleton |
02:25 | <@Derakon> | Wherever seems appropriate. *shrug* |
02:26 | < McMartin> | And yeah, this might as well be a global-scale thing until you can prove it shouldn't be. |
02:26 | < Tarinaky> | McMartin: Singletons were explained to me as being a classy way of doing globals. |
02:26 | < McMartin> | Yes. |
02:26 | < Tarinaky> | McMartin: Hence why I've used the terms interchangeably. |
02:26 | < McMartin> | By "classy" here we mean "C++ is fucking broken about initialization of globals" |
02:26 | < Rhamphoryncus> | singletons aren't classy. They're just a global with a dot in the name |
02:26 | <@Derakon> | A singleton is simply a global instance of a class, with the rule of thumb that you only ever have one instance of that class. |
02:27 | < McMartin> | Rhamphoryncus: They also initialize in predictable orders, as opposed to "whatever dice the linker rolled" |
02:27 | <@Vornicus> | Globals are perfectly acceptable for application-wide data stores. |
02:27 | <@Derakon> | You use the singleton instead of just shoving its fields into the global namespace because it's neater and makes interacting with the data more pleasant. |
02:27 | < Rhamphoryncus> | If at all possible I wouldn't use a global. I'd create an instance in main() and pass it around |
02:27 | <@Vornicus> | And singletons are kind of global. |
02:27 | < Tarinaky> | Rhamphoryncus: I tried that. It got messy and tiresome ;x |
02:28 | <@Derakon> | Anyway, I'm off to game night. Good luck, Tarinaky! |
02:28 | | Derakon is now known as Derakon[AFK] |
02:28 | < McMartin> | Rhamphoryncus: For your basic data tables? |
02:28 | < Rhamphoryncus> | Tarinaky: usually it means making it an attribute of a Game() object, which is what really gets passed around |
02:28 | < McMartin> | The only reason to not have them be global is if you have a class that represents "this is a game" and you're really writing a generic engine. |
02:29 | < Rhamphoryncus> | McMartin: for a non-trivial program with non-trivial tables, yes |
02:29 | < Rhamphoryncus> | If it's not written in stone it shouldn't be a global |
02:30 | < McMartin> | Anything you read from a file and don't change may as well be written in stone. |
02:30 | < Rhamphoryncus> | If you read it from a file it's not written in stone |
02:30 | < Tarinaky> | To be fair. Stuff like datafiles -could- just as easily be hardcoded in. |
02:31 | < Tarinaky> | For a given value of just as easily. |
02:31 | < Tarinaky> | It's just more of a pain to keep it organised that way. |
02:31 | < McMartin> | More to the point, you still don't want to have dozens of arguments for stuff that's going to be everywhere. |
02:31 | < McMartin> | Instead, you'd initialize Game and then have Game.run() |
02:31 | < Rhamphoryncus> | Tarinaky: could, but why? If you're passing around a Game() object then it's trivial not to be a global, and you've got enough other "global" data that you want a Game() object |
02:31 | <@Vornicus> | I have somewhere around here a thing that generates procedurally a thing that gets an allcaps name. |
02:31 | < McMartin> | But then, all your fields are globals, you're just spending twice as long looking anything up in them. |
02:32 | <@Vornicus> | (it's a list of legal ability score loadouts, which eventually gets populated permanently into a dropdown) |
02:34 | < Tarinaky> | On a tangential note. If I have my keys be strings (so they're easy to serialise)... What's a foolproof way of generating an unused one? |
02:34 | <@Vornicus> | It is, technically, written in stone, but I didn't want to write out all the possibilities. |
02:34 | < McMartin> | Tarinaky: Have a method with an increasing counter. |
02:35 | < McMartin> | Each time you call its method, the first time you get "Gensym1", then "Gensym2", then "Gensym3", and so on. |
02:35 | < Rhamphoryncus> | Tarinaky: counter is the only guaranteed way (so long as you maintain the counter invariants, ie don't reset it to 0). Otherwise the next best thing is a rather large random number as in some of the UUID options |
02:37 | < Tarinaky> | Right. One of the solutions I had involved using size() in a slightly hackish way. |
02:38 | < Tarinaky> | On the assumption that you could never have more entities than the largest numeric identifier. :x |
02:38 | < Tarinaky> | Not without having a collision anyway. |
02:39 | < Tarinaky> | Although that had the problem that the data could never be allowed to shrink. :x |
02:41 | < McMartin> | The largest numeric identifier is four times the total number of objects you could ever allocate without running out of address space. |
02:42 | < celticminstrel> | Rhamphoryncus: Sorry, I misspoke; you're right, you can't have an infinite precision floating point (though you could get the same effect using algebraic numbers or something). I was probably thinking of entities like Python long when I said "infinite". What I meant to say was arbitrary precision, which would be essentially what you called user-defined. |
02:43 | < celticminstrel> | Okay, so is outstream << instream a bad idea for binary data? |
02:43 | < Rhamphoryncus> | Unfortunately the terms are used interchangeably :( |
02:43 | < Rhamphoryncus> | Python's long really is infinite precision (it retains the exact value you throw at it, short of running out of ram), but it's often called arbitrary precision. |
02:44 | < celticminstrel> | But it can actually be infinite because it's an integer, not a float. |
02:44 | < Rhamphoryncus> | right |
02:44 | < celticminstrel> | Whereas irrationals make it impossible to have a truly infinite precision float. |
02:44 | < Rhamphoryncus> | Damn those irrationals! |
02:45 | < celticminstrel> | Yep. :) |
02:45 | | * Rhamphoryncus has spent far too much brain power trying to find ways to chip away at that limitation |
02:45 | < celticminstrel> | Anyone have anything to say about the above stream question? |
02:46 | < Rhamphoryncus> | I don't use C++ enough I'm afraid. I've never liked the streaming API |
02:47 | < celticminstrel> | Anyone else, then? ;) |
02:53 | <@ToxicFrog> | celticminstrel: what's the contract for ostream::operator<<(istream)? |
03:02 | < celticminstrel> | Um. Not quite sure... I do know that it's usually not used for binary data, though. |
03:03 | < celticminstrel> | But I'm not sure if there's another way to dump one stream into another. |
03:04 | < celticminstrel> | I actually haven't even checked yet to see if what I mentioned works. |
03:05 | | Alek [omegaboot@Nightstar-c531ef76.il.comcast.net] has quit [Ping timeout: 121 seconds] |
03:05 | <@ToxicFrog> | Look it up. |
03:05 | <@ToxicFrog> | www.cplusplus.com |
03:05 | <@ToxicFrog> | Look up operator<< in ostream. |
03:05 | < celticminstrel> | I'm doing this right now. |
03:05 | | Alek [omegaboot@Nightstar-c531ef76.il.comcast.net] has joined #code |
03:07 | < celticminstrel> | I think "outstream << instream.rdbuf()" might work; either that or copy with stream iterators. |
03:08 | < McMartin> | Reading and feeding a char at a time until you can't anymore is probably the best way to do it, yeah. |
03:08 | < celticminstrel> | Which is what that does, according to cplusplus.com. |
03:09 | <@Vornicus> | I am so glad I get to work in high level languages where I can throw JSON at something and it comes out the other end a fully qualified object of appropriate type. |
03:11 | <@ToxicFrog> | Seconded. |
03:17 | | Alek [omegaboot@Nightstar-c531ef76.il.comcast.net] has quit [Ping timeout: 121 seconds] |
03:47 | <@Vornicus> | Arg. I know my successful small projects are getting more ambitious, but I know perfectly well I still can't pull off 3d gamery. |
03:59 | | gnolam [lenin@Nightstar-38637aa0.priv.bahnhof.se] has quit [[NS] Quit: Z?] |
04:12 | < celticminstrel> | Now to determine the best way to byte-swap... |
04:19 | < celticminstrel> | Is it a bad idea to use GCC compiler intrinsics for this? |
04:20 | | Zed [Zed@Nightstar-d0088b95.or.comcast.net] has joined #code |
04:24 | < McMartin> | Intrinsics are the best way to do it, actually. |
04:24 | < McMartin> | That's how you stay portable across architectures. |
04:24 | < McMartin> | Not across *compilers*, but there are more architectures than compilers. |
04:27 | | * Kazriko ponders making a 3d sphere wandering around a simple single screen platform maze... |
04:29 | < celticminstrel> | Odd that there's no intrinsic for 2-byte numbers, though. Fortunately, I'm working with 4-byte numbers. |
04:31 | < celticminstrel> | Incidentally, would the intrinsics always swap, or swap only little-endian architectures? |
04:34 | < McMartin> | Not sure. Probably depends on the intrinsic. |
04:34 | | * McMartin tends to code his binary readers such that they don't need swapping per se |
04:36 | < celticminstrel> | ...how would you do that? |
04:36 | | * Vornicus is so glad he works in a language where, if he /really/ needs to deal with binary files, he can tell the unpacker the endianness and let it handle it. |
04:36 | < celticminstrel> | That would certainly be nice. |
04:36 | < celticminstrel> | The Python struct module. |
04:37 | < Rhamphoryncus> | Once again spoiled by python? |
04:37 | <@Kazriko> | struct.unpack(">"+"h"*intlen, inputbytes) ? |
04:37 | | * Kazriko writes lines like that so often... |
04:37 | < celticminstrel> | Something like that, yeah. But I'm in C++ now. |
04:38 | <@Vornicus> | Kazriko, Rhamphoryncus: Yes indeed. |
04:38 | <@Kazriko> | For my C++ code... I'm dealing with a really bizarre arch, but i have it written so that I can swap big to little by just changing a few of my union structs around. |
04:38 | <@Vornicus> | Though I'm told TF's struct lib for Lua is really, really, really awesome. |
04:39 | <@Kazriko> | That's on a scadapack though. all of the data I end up dealing with is encoded in a large array of 16 bit integers... |
04:39 | <@Kazriko> | so everything I have is written to convert to and from 16 bit integers. |
04:40 | < celticminstrel> | Okay, now I have an attempt to dereference a past-the-end iterator... when writing a string to cout. :/ |
04:40 | <@Vornicus> | oops |
04:41 | < McMartin> | Are you checking at the end of a loop instead of the beginning? |
04:42 | <@ToxicFrog> | Vornicus: the new version needs some tuning, though |
04:42 | < celticminstrel> | ...what? |
04:42 | < celticminstrel> | I just had a cout << "some text" << string; I saw the text, but nothing else. I suppose the string could've been empty though, and the dereference happened a bit later. |
04:44 | < celticminstrel> | Ooh, I see a potential culprit area. |
04:45 | < celticminstrel> | Note to self: stop jumping to conclusions. |
04:47 | | Zed [Zed@Nightstar-d0088b95.or.comcast.net] has quit [Client closed the connection] |
04:49 | | Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has joined #code |
05:06 | | celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has quit [[NS] Quit: *hums* Can't stay now!] |
05:09 | | Zed [Zed@Nightstar-d0088b95.or.comcast.net] has joined #code |
05:14 | | Serah [Z@3A600C.A966FF.5BF32D.8E7ABA] has joined #code |
05:28 | | Alek [omegaboot@Nightstar-c531ef76.il.comcast.net] has joined #code |
05:35 | | Alek [omegaboot@Nightstar-c531ef76.il.comcast.net] has quit [Ping timeout: 121 seconds] |
05:37 | | Vornicus is now known as Vornicus-Latens |
05:46 | | Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has quit [Connection closed] |
05:53 | <@Kazriko> | Vornicus-Latens, but the key is that he was smart enough to look in gyneferous ponds for his sword. |
07:15 | < Zed> | http://www.newegg.com/Product/ComboDealDetails.aspx?ItemList=Combo.345028&nm_mc= EMC-IGNEFL030410&cm_mmc=EMC-IGNEFL030410-_-Combo-_-LM1A-_-Combo345028 supercheap CPU/mobo combo with onboard video. |
09:24 | | You're now known as TheWatcher |
10:04 | | AnnoDomini [annodomini@Nightstar-a71cf81d.adsl.tpnet.pl] has joined #code |
10:04 | | mode/#code [+o AnnoDomini] by Reiver |
10:45 | | Orthia [orthianz@Nightstar-75a4962a.xnet.co.nz] has joined #code |
11:35 | <@AnnoDomini> | Groan, bitch, moan. |
11:35 | <@AnnoDomini> | It appears that LINQ doesn't support Access databases. |
12:07 | <@AnnoDomini> | ARGH. |
12:07 | <@AnnoDomini> | Why won't SQL Server let me attach a database located in a subfolder of My Documents? |
12:07 | <@AnnoDomini> | Why won't it let me NAVIGATE to that location? |
12:19 | | You're now known as TheWatcher[afk] |
13:00 | | celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has joined #code |
13:51 | | Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has joined #code |
13:59 | | gnolam [lenin@Nightstar-38637aa0.priv.bahnhof.se] has joined #code |
14:02 | | Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has quit [Connection closed] |
14:24 | | Orthia [orthianz@Nightstar-75a4962a.xnet.co.nz] has quit [Ping timeout: 121 seconds] |
14:25 | | Serah [Z@3A600C.A966FF.5BF32D.8E7ABA] has quit [Ping timeout: 121 seconds] |
15:26 | | Vornicus-Latens is now known as Vornicus |
16:11 | | You're now known as TheWatcher |
16:19 | | Serah [Z@26ECB6.A4B64C.298B52.D80DA0] has joined #code |
16:21 | | Rhamphoryncus [rhamph@Nightstar-8931f88f.abhsia.telus.net] has quit [Client exited] |
17:32 | < Namegduf> | ...why does Javadoc require author tags on classes? |
17:32 | < Namegduf> | Are these people from the past? |
17:32 | < Namegduf> | Before version control was invented? |
17:34 | <@AnnoDomini> | Javadoc is from the past. |
17:34 | <@AnnoDomini> | IIRC, there's something newer. |
17:34 | <@Vornicus> | Javadoc assumes you're publishing the code. |
17:35 | < Namegduf> | If you're publishing code, wouldn't you be so kind as to share your version history? |
17:35 | < Namegduf> | At least, nowadays. |
17:35 | <@Vornicus> | Probably. |
17:38 | <@AnnoDomini> | Version control looks cool. At least the illustration on Wikipedia. |
17:39 | < Namegduf> | Any idea where/what the newer thing is? |
17:40 | <@AnnoDomini> | Not really. I remember there being an alternative, spoken of by the teacher in class once, but I just used Javadoc. |
17:44 | <@Vornicus> | Doxygen? |
17:48 | <@AnnoDomini> | That sounds like it. |
18:22 | < celticminstrel> | Whoa. My laptop has more memory than my home computer. |
18:22 | < celticminstrel> | (Yes, it's Doxygen.) |
18:23 | < celticminstrel> | I only have 1GB of memory. Maybe that's why my computer is so slow. |
18:24 | <@Vornicus> | 1GB should be enough most of the time. |
18:25 | <@Vornicus> | I have 3GB but usually run under 1GB. |
18:27 | <@Vornicus> | (but when I do a lot of crunching that spare 2GB -- and the spare half-dozen cores that don't get used when I'm just farting around -- come in mighty handy, I have never seen this computer thrash.) |
18:28 | < celticminstrel> | I tend to have a dozen or so programs open at a time. |
18:29 | < celticminstrel> | Though that's partly because I just don't bother closing them. |
18:29 | < celticminstrel> | I'm not usually using that many at one time. |
18:55 | <@Vornicus> | If you use Firefox or Safari they tend to eat memory as they run. |
18:57 | < celticminstrel> | I have noticed this. |
18:58 | <@AnnoDomini> | Yes. |
18:58 | <@AnnoDomini> | Opera is better. |
19:01 | <@Vornicus> | Chrome too. |
19:02 | < celticminstrel> | Chrome eats memory too? |
19:02 | < celticminstrel> | Or Chrome is better? |
19:06 | <@AnnoDomini> | Chrome seems to be generally okay. |
19:11 | < Namegduf> | I don't find Chrome eats memory over time since I turned FlashBlock on by default. |
19:13 | <@Vornicus> | Chrome cleans up after itself more often and better than FF or Safari do. I don't know about Opera or IE or any others. |
19:17 | <@AnnoDomini> | Opera appears to do it better than Chrome, if my current memory usage is any indication. |
19:18 | < Namegduf> | Current memory use generally isn't. |
19:18 | < Namegduf> | Unless it's over time and such. |
19:19 | < Namegduf> | Chrome has a higher overhead because it separates things by process, with the gain that the processes have separately allocated RAM, and there's no fragmentation issues when cleaning up after deleting one. |
19:20 | < Namegduf> | So it eats more at first, but is supposed to not have the "grow over time " problem. |
19:49 | | Derakon[AFK] is now known as Derakon |
20:09 | | * Derakon facepalms at this post on the Angband forums complaining that the game no longer works on Windows 98. |
20:10 | <@Vornicus> | Pfff |
20:11 | < McMartin> | :( |
20:11 | < Namegduf> | XD |
20:16 | < celticminstrel> | XD |
20:28 | | Vornicus [vorn@ServerAdministrator.Nightstar.Net] has quit [[NS] Quit: Leaving] |
20:32 | | Vornicus [vorn@ServerAdministrator.Nightstar.Net] has joined #code |
20:32 | | mode/#code [+o Vornicus] by Reiver |
20:53 | < Tarinaky> | In C++ is there anything 'bad' that will happen if I use "typedef std::string string;" instead of "using std::string;"? My text editor only adds highlighting from the former but not the latter. |
20:54 | <@TheWatcher> | You'll get people beating you until you get a better editor? |
20:54 | < Tarinaky> | Beating me? |
20:55 | | * TheWatcher thwaps Tarinaky |
20:55 | <@TheWatcher> | yes |
20:55 | < Tarinaky> | q.q |
20:55 | < Tarinaky> | Is it that bad? |
20:55 | <@Derakon> | It's unexpected and surprising. |
20:55 | <@Derakon> | And as a general rule, code that is surprising is bad code. |
20:55 | <@TheWatcher> | This makes it bad |
20:56 | < Tarinaky> | As far as I've determined casually it doesn't seem to break anything :/ |
20:56 | | * Derakon heads out, will let TW handle this one. |
20:56 | | Derakon is now known as Derakon[AFK] |
20:57 | <@Vornicus> | I don't see anything particularly surprising about either. |
20:58 | < Tarinaky> | The problem is that it only knows the structures/classes in documents that are open at that instant. |
20:59 | <@TheWatcher> | Rule of thumb when coding: if you have to ask if it's bad, it is. |
20:59 | < Tarinaky> | I get that it's bad. I'm asking how bad. |
21:00 | < celticminstrel> | I don't see what's wrong with it... |
21:00 | <@TheWatcher> | On a scale of 1 to 10, where 1 is Awesome Code, and 10 is Sebastian? About 2 or 3. |
21:02 | < Tarinaky> | That's okay then. As long as it's better than the times I've written comments in latex maths. >.> |
21:02 | <@TheWatcher> | It might throw someone looking at the code, and make them wonder WTF you were doing it for, but it won't /break/ things |
21:03 | <@TheWatcher> | I still say that better editor >>> doing something kinda weird that's likelt to cause a mental stumble. |
21:05 | < Tarinaky> | My choice of editor is a bit like democracy. |
21:05 | < Tarinaky> | It's the worst - apart from the others I've tried. |
21:05 | <@TheWatcher> | (Also, Tarinaky, if you're using Doxygen formatting for your comments, you can use the formulas stuff to get it to output the processed maths in the html/latex output http://www.stack.nl/~dimitri/doxygen/formulas.html) |
21:06 | < Tarinaky> | TheWatcher: I've never needed Doxygen. I just find Latex Maths formatting easier to read. |
21:07 | < Tarinaky> | Especially for divisions/fractions. It removes any ambiguity about what's on the top line and what's on the bottom line. |
21:12 | | Zed_ [Zed@Nightstar-d0088b95.or.comcast.net] has joined #code |
21:13 | <@AnnoDomini> | I wonder if there's an application that can randomize words on a thesaurus-linked-basis. |
21:15 | | Zed [Zed@Nightstar-d0088b95.or.comcast.net] has quit [Ping timeout: 121 seconds] |
21:17 | <@AnnoDomini> | Nevermind. EM found it for me. |
22:29 | < Tarinaky> | I wonder if it'd be possible to fake-translate a text into a fictitious language using hashes of the individual words. |
22:30 | <@TheWatcher> | Yes; WoW does that for the race languages |
22:30 | < Tarinaky> | Ah. |
22:31 | < Tarinaky> | I was thinking something like using markov chains to generate words and using the plain english to seed the PRNG. |
23:41 | | Tarinaky [Tarinaky@Nightstar-1a2efb86.adsl.virginmedia.net] has quit [Client closed the connection] |
23:46 | <@Kazriko> | (The only foreign word I learned in that game was "kek" which was apparently orcish for "lol") |
23:48 | <@AnnoDomini> | By that logic, Koreanese are orcs. |
23:53 | | AbuDhabi [annodomini@Nightstar-8d39e7d8.adsl.tpnet.pl] has joined #code |
23:55 | | AnnoDomini [annodomini@Nightstar-a71cf81d.adsl.tpnet.pl] has quit [Ping timeout: 121 seconds] |
--- Log closed Sun Mar 07 00:00:20 2010 |