--- Log opened Thu Dec 12 00:00:16 2013 |
00:54 | | gnolam [lenin@Nightstar-lgrapr.tbcn.telia.com] has quit [[NS] Quit: Gone] |
01:01 | | Derakon[AFK] is now known as Derakon |
01:04 | | redwire [redwire@Nightstar-27dppb.nl.bellaliant.net] has quit [[NS] Quit: Textual IRC Client: www.textualapp.com] |
01:16 | <@Reiv> | McMartin: Programming discipline? |
01:27 | <&McMartin> | The discipline to sit your ass down and write the shit out and grind through the bugs until it works |
01:28 | <~Vornicus> | I wish I had more of that. |
01:28 | <&McMartin> | Learn Python the Hard Way insists that you need to hand-copy all the examples and that failing to do so misses the point entirely |
01:28 | <&McMartin> | This to me says that it's not trying to teach the craft, but the discipline. |
01:33 | | * Vornicus pokes vaguely at interaction design. The game has modes; in order to use a command you must be in the correct mode. |
01:36 | <@Alek> | McM: yus. |
01:38 | <~Vornicus> | Each different command requires different inputs; therefore, each command should have its own function. The referee must 1. publish the current mode, and 2. validate that the command sent is correct both in timing and content. |
01:39 | <~Vornicus> | Then there's the announcer, who needs to know when game modes change. Thus the referee must publish mode changes (through a callback?) to the announcer. |
01:48 | <~Vornicus> | Okay so. Model: controls game state; publishes game state changes to the view. View: can read the full game state, hears about state changes through a callback it gives to the referee. |
01:48 | <~Vornicus> | Controller: parses commands into model commands. |
01:55 | <~Vornicus> | Okay. Model commands. |
01:56 | <@Tarinaky> | McMartin: The purpose of copying out the examples is as a mnemonic device. |
01:56 | <&McMartin> | Yes, that is what I mean when I say "drill" |
01:56 | <@Tarinaky> | McMartin: Having copied it out character by character (and gotten the thing to work - providing a psychological bene) helps you memorise the bits of code you just copied. |
01:57 | <@Tarinaky> | Once you know a language you can use the comparison with another language instead. |
01:57 | <@Namegduf> | Because all true programmers routinely copy code by hand and rote-memorise snippets. |
01:57 | <&McMartin> | Most programming tutorials do not involve drill, they involve examples you read and then tangentially related exercises. |
01:57 | <@Tarinaky> | It's how I learned. |
01:58 | <&McMartin> | Namegduf: The argument here would be "this is attempting to teach the traits that 'true programmers' take so utterly for granted they just dismiss everyone who doesn't have it innately/didn't learn it at like age 4" |
01:58 | <&McMartin> | When I was a kid, typing in other people's listings was how you got software in the first place, so there is some precedent for it happening 'automatically' in the past. |
01:59 | <@Tarinaky> | I've not read the book in question. Drill is utterly useless at anything beyond the newbiest of newb tutorials. |
01:59 | <@Tarinaky> | But it has its place. |
02:00 | <@Tarinaky> | McMartin: And don't forget debugging the inevitable printing error! |
02:02 | <&McMartin> | Heh. It turns out Compute! was pretty good about those. |
02:02 | <~Vornicus> | Yeah, Compute!'s Gazette was my place to go for new stupid games |
02:02 | <&McMartin> | They had multiple levels of checksum involved. |
02:03 | <@Tarinaky> | I feel young in this discussion. |
02:03 | <&McMartin> | The worst I've found it guilty of is some gratuitous bullshit that made it break on PAL machines and was a no-op on NTSC. |
02:03 | <&McMartin> | Tarinaky: Well, yes, this is exactly why I feel unable to comment on Learn Python The Hard Way |
02:03 | <~Vornicus> | Tarinaky: if you're under 30 you're a wee bairn in this one |
02:03 | <@Tarinaky> | bairn? |
02:03 | <~Vornicus> | newborn baby |
02:04 | <@Tarinaky> | Was this... a common word to use in your... century... |
02:04 | <&McMartin> | It's doing things that none of the training I ever got did. It's also doing things that I (as someone pushing 36) did as a matter of course as a youth in order to be able to do *fucking anything*, so if there was a lesson to be taught by that it would have been both implicit and invisible. |
02:04 | <&McMartin> | Depends on how Scottish you are, I think. |
02:05 | <~Vornicus> | that |
02:05 | <&McMartin> | Also, one of the reasons I push Python as a learning language is because it shares traits with the old microcomputer BASICs that, say, C, Java, and JS do not. |
02:05 | <&McMartin> | (The Lisps have it, too, but few people learn on LISP outside of the ivory tower) |
02:06 | <&McMartin> | The modern BASICs seem to lack it. |
02:06 | <@Tarinaky> | Python is also cross-platform is is nice. |
02:06 | <&McMartin> | And by "Modern" here I mean, like, 1989. |
02:06 | <@Tarinaky> | Because otherwise you can get into a muddle of "unless it's a tuesday or it's raining and you're on Windows" |
02:06 | <&McMartin> | The micro BASICs had more in common than you'd expect |
02:07 | <&McMartin> | Less than Python cross-platform, but about as much as C without use of standard interop libraries. |
02:07 | <@Tarinaky> | Well, when I learned C/C++ Microsoft VC++ pushed void main :/ |
02:07 | <&McMartin> | (This is because AppleSoft BASIC, IBM BASIC, and GW-BASIC were all derived from MicroSoft BASIC, and CBM and Atari BASICs literally were MS BASIC. |
02:08 | <&McMartin> | ) |
02:08 | <&McMartin> | The parts that were different were basically disk/casette access and graphics/sound extensions if any. |
02:08 | <&McMartin> | (The fact that the C64 had no extensions is why it was so POKE-happy; you did everything via memory-mapped I/O) |
02:08 | <@Tarinaky> | Literally every "Learn C/C++ in 17.245 hours for blind-dumb midgets" would try to get me to do stuff that, obviously, didn't work on whatever horrible compiler I was using. |
02:09 | <@Tarinaky> | I think it was Mingw... which was an utter nightmare to find and set up as a newbie. |
02:09 | <&McMartin> | MinGW still isn't very good. |
02:09 | | * Vornicus stubs out the referee calls, now to build the damn game. |
02:09 | <@Tarinaky> | At least now I can install MinGW with one eye closed. |
02:09 | <&McMartin> | MS has once again started distributing free stripped-down versions of Visual Studio. |
02:09 | <&McMartin> | Which they had also done back when I was learning C! |
02:10 | <&McMartin> | Well, then it was "nominal cost", which meant you got a couple floppy disks in the back of your C tutorial book. |
02:10 | <&McMartin> | You were paying for the media and the S&H. =P |
02:11 | <@Tarinaky> | As a consequence of all this I didn't really 'get' programming till I discovered NWN Scripting. |
02:11 | <@Tarinaky> | Which I guess makes the book that always gets quoted about Steve's Left Testicle the programming book I learned from, if not the one I started with. |
02:12 | <@Tarinaky> | Which a friend gave me because he could make neither heads nor tails of it. |
02:13 | <&McMartin> | Heh |
02:13 | <&McMartin> | Did NWN Scripting let you dick around on an interactive console? |
02:13 | <@Tarinaky> | No. |
02:14 | <&McMartin> | I am reminded that I need to do some 8-bit doodling tonight. |
02:15 | <@Tarinaky> | 256 colors is enough for anyone. |
02:15 | <@Azash> | NWScript was written in an IDE-like thing if I recall correctly |
02:15 | <&McMartin> | But yeah. There were a whole lot of things that someone with just the manual their computer came with could do, in terms of programming, that are humongously inconvenient in the modern world. |
02:15 | <@Tarinaky> | Azash: You remember correctly. |
02:15 | <&McMartin> | Python solves a lot of this, and Python+Pygame gets you a good distance further. |
02:16 | <@Azash> | McMartin: A friend of mine is active in what's called the 'link centre' at our department |
02:16 | <@Azash> | Fostering programming in high school and even grade school students |
02:16 | <&McMartin> | Cool |
02:16 | <@Azash> | Apparently it's not even that difficult |
02:17 | <&McMartin> | That was a fad when I was a kid, and the claims made were pretty grandiose, so it was a fad, but it was also handy. |
02:17 | <&McMartin> | Also, LOGO was and still is awesome and I will fight anyone who says different |
02:17 | <@Azash> | What's that? |
02:17 | <&ToxicFrog> | ;.; |
02:17 | <@Tarinaky> | The program with the turtle who draws on the screen. |
02:17 | <&ToxicFrog> | LOGO is the turtle language, and also a cleverly disguised lisp dialect. |
02:18 | < Shiz> | import turtle |
02:18 | <@Azash> | Some kind of programming tutorial? |
02:18 | < Shiz> | checkmate atheists |
02:18 | <&McMartin> | With some seriously wacky semantics that let it get around having to have things like function signatures. |
02:18 | <&ToxicFrog> | PEN DOWN. FORWARD 20. RIGHT 90. FORWARD 20. RIGHT 90. FORWARD 20. RIGHT 90. FORWARD 20. PEN UP. |
02:18 | <&McMartin> | Azash: No, it was the language they taught the kids in. |
02:18 | <@Azash> | Shiz: def turtle() turtle() |
02:18 | <@Azash> | Ah |
02:18 | <&ToxicFrog> | Azash: it is a programmer language where you control a (virtual or, in some implementations, physical) robot turtle with a rectractable pen on the bottom. |
02:18 | <~Vornicus> | I got pretty grumpy at pygame, it really felt... idunno |
02:18 | < Shiz> | I had a physical one of those |
02:18 | <&ToxicFrog> | s/programmer/programming/ |
02:18 | < Shiz> | well, not a turtle |
02:18 | < Shiz> | pygame is ugly |
02:19 | <&ToxicFrog> | You issue commands controlling the turtle, and it draws stuff. |
02:19 | <&ToxicFrog> | It was in fact my first programming language. |
02:19 | < Shiz> | if anything i'd just use pysdl2 myself |
02:19 | <&McMartin> | After TF's command (which draws a square) you then learned PEN DOWN REPEAT 4 [FORWARD 20. RIGHT 90.] PEN UP |
02:19 | <&McMartin> | And then PD REPEAT 4 [FD 20 RT 144] PU and make the fundies freak out. |
02:19 | <@Azash> | Haha |
02:19 | <&McMartin> | Er, repeat 5, of course. |
02:19 | < Shiz> | and then |
02:20 | <@Azash> | I take it forward takes distance and right takes degrees? |
02:20 | <&McMartin> | Yup. |
02:20 | <&McMartin> | There is also left. |
02:20 | <&McMartin> | And back. |
02:20 | < Shiz> | .@4[^20>90], |
02:20 | <&McMartin> | And you can define functions &c |
02:20 | <@Azash> | why do left 90 when you can right 270? |
02:20 | < Shiz> | :D |
02:20 | < Shiz> | why do right 270 when you can 720 noscope |
02:20 | <&McMartin> | Because kids can tell when you're taking the piss. |
02:20 | <&McMartin> | (One of the weirder bits of Logo is that it uses dynamic scope everywhere) |
02:21 | < Shiz> | i want my turtle to do quickscopes |
02:21 | <&McMartin> | But I had Terrapin Logo on my C64 and it had a full adventure game where the text commands were actually functinos you were executing. |
02:21 | <@Tarinaky> | My complaint about Logo is, as a student, it's impossible to see how to go from Logo to [Software] |
02:21 | <@Tarinaky> | They never taught us how to define functions. |
02:21 | <&McMartin> | Logo is not a language for teaching software engineering. |
02:21 | <&McMartin> | Yeah, I learned that Logo was a real language "in the gutter", basically |
02:22 | <@celticminstrel> | Huh? |
02:22 | <@Tarinaky> | So no introduction to concepts like stack. |
02:22 | <&McMartin> | Well |
02:22 | <&McMartin> | Logo's stack is totally different from basically every other language ever, so this is probably a blessing. |
02:22 | <&McMartin> | When you refer to a variable not defined locally, you don't go to global, or to defining context. You go to *your caller*, until you hit the top, and then you check globals. |
02:23 | <&McMartin> | ("Dynamic scope") |
02:23 | <@Tarinaky> | You can probably make this argument about any subject told in school but... what's the point in teaching X if you can't do anything with it unless you spend another 15->20 years following it as a discipline sight unseen. |
02:23 | <@Azash> | Seems handy |
02:23 | <@celticminstrel> | What do you mean by "in the gutter"? |
02:23 | <&McMartin> | Azash: Means functions don't need to define arguments |
02:23 | < Shiz> | McMartin: that sounds |
02:23 | < Shiz> | terrifying |
02:23 | <@Azash> | Mm |
02:23 | <&McMartin> | celticminstrel: From books and other kids, not from formal training. |
02:24 | <&McMartin> | Tarinaky: The thing that was being taught, if anything was, was the cognitive ability to break a large task into a series of steps. |
02:24 | <&McMartin> | This is not actually a universal skill |
02:24 | <&McMartin> | Though I do tend to treat its lack as basically a mental disability like dyslexia |
02:24 | <@Azash> | It is a nice stepping stone into programming~ |
02:25 | < Shiz> | like a good friend of mine once said as a non-programmer |
02:25 | <&McMartin> | If you can't do that, you can't program, period. |
02:25 | < Shiz> | "programming is just breaking up a problem into subproblems small enough to google" |
02:25 | <&McMartin> | The thing I don't get is, if you can't do that, *how do you get dressed in the morning* |
02:25 | <@Azash> | All at once |
02:25 | <@Tarinaky> | McMartin: By putting on your pants both legs at the same time. |
02:25 | < Shiz> | ( ââ¿â) |
02:25 | < Shiz> | I put my pants on two legs at a time |
02:26 | <&McMartin> | Tarinaky: But how do you fit your shoes through? |
02:26 | <&ToxicFrog> | McMartin: that, and also getting you to internalize the idea that "I can tell the computer what to do, and it will obey me exactly" |
02:26 | <@Tarinaky> | Both at the same time! |
02:26 | <&McMartin> | ToxicFrog: This is the joy of REPLs, yes |
02:26 | <@Tarinaky> | Or, given the age I encountered Logo: Ask your mam to do it. |
02:26 | <&McMartin> | And something sadly lacking |
02:28 | <~Vornicus> | McM: surely you've seen Wallace and Gromit. That's how they get dressed in the morning. |
02:28 | <@Tarinaky> | Anyway. It took me entirely too long to figure out how to get programming. |
02:28 | <@Tarinaky> | Because of all those things that're so inconvenient on a modern computer like compiling code. |
02:29 | <&McMartin> | (Back in MY day we didn't HAVE compilers. We wrote in interpreted languages or we POKED OUR GODDAMN MACHINE CODE INTO MEMORY FROM DATA STATEMENTS AND THEN RAN IT) |
02:29 | <&McMartin> | (... and this may have actually been a step up >_<) |
02:29 | <@Tarinaky> | Pretty sure that still involves compilation. |
02:30 | <@Tarinaky> | Just... really simple ones. |
02:30 | <@Tarinaky> | Human Mnemonic goes in -> Integer Op codes come out. |
02:30 | <~Vornicus> | interpreted languages aren't compiled; machine code may be generated by hand, if you're really grumpy |
02:30 | <@Tarinaky> | Yeah alright. |
02:31 | <@Tarinaky> | My point isn't mitigated in any-way by this fact. |
02:31 | <~Vornicus> | And for computers that size this was reasonably likely! |
02:31 | | VirusJTG [VirusJTG@Nightstar-6i5vf7.sta.comporium.net] has quit [[NS] Quit: Program Shutting down] |
02:31 | <@Tarinaky> | Although I still kindof consider Interpreters as having a compiler/box thatoutputs machine code... It's just getting piped straight away. |
02:31 | <&McMartin> | The boundaries are fuzzier these days. |
02:31 | <@celticminstrel> | That's not how it usually works. |
02:32 | <@Tarinaky> | And computers don't usually work like Turing Machines. |
02:32 | <&McMartin> | The 8-bit BASICs were *tokenized* but there was a program in ROM that basically did "read token, have a giant switch statement, jump to a routine that reads more line and computes as you go, jump back to 'read token' at end of statement" |
02:32 | <@Tarinaky> | Meh. |
02:32 | <&ToxicFrog> | Tamber: what you describe is a JIT. |
02:32 | <@celticminstrel> | There's no need to generate the machine code; you can just have the parse tree drive the program logic. |
02:32 | <&McMartin> | Modern terps tend to do about 2/3s of compilation and... yeah, what celticminstrel said. |
02:33 | <&McMartin> | You build the parse tree, resolve the references, &c once, and go to town. |
02:33 | <@Tarinaky> | celticminstrel: Sure, but you could print out the routine for a token instead of executing it. |
02:33 | <&ToxicFrog> | It seems more common these days to emit bytecode for a virtual register or stack machine rather than walk the tree and execute directly. |
02:33 | <@Tarinaky> | And this would have some meaning. |
02:33 | <&McMartin> | The C64 BASIC ROM would actually convert strings to floating point numbers every time you executed a line of code. |
02:33 | <@celticminstrel> | Executing the parse tree is actually easier than compiling it to machine code. |
02:33 | <&ToxicFrog> | The most recent language I can recall that did the latter was Ruby, and it got rewritten to do the former because it was famously slow. |
02:34 | < Shiz> | it's also incredibly inefficient |
02:34 | < Shiz> | yeah, what TF said |
02:34 | <@celticminstrel> | Sure. |
02:34 | <&McMartin> | You can then JIT or, uh, AOT the resulting bytecode. |
02:34 | <&ToxicFrog> | That said, from the "inexperienced programmer" perspective, the practical difference between compiled and interpreted is that in an interpreted language you write the program and can run it as-is, whereas with a compiled language there are extra steps you have to take to turn it into something you can run. |
02:34 | <@Tarinaky> | Anyway. This isn't what I wanted to talk to. |
02:34 | <@Tarinaky> | *talk about |
02:35 | <@Tarinaky> | As a 10 year old with a 'modern' computer between the first gulf war and the second. |
02:35 | <~Vornicus> | "AOT"? |
02:35 | <@Namegduf> | Ahead Of Time. |
02:35 | <~Vornicus> | ah |
02:35 | <@Tarinaky> | Figuring out how to make a program was not easy. |
02:35 | <@Tarinaky> | Even with books. |
02:35 | <@Tarinaky> | And printing off bits of the internet at a friends house. |
02:36 | <&McMartin> | Yeah, that doesn't surprise me. |
02:37 | <&McMartin> | Though it's still only off by a few years. |
02:37 | <~Vornicus> | The 90s were... |
02:37 | <~Vornicus> | I don't know if it was like this for a lot of people, but it seemed like in the 80s it was a lot easier to start programming? |
02:37 | <&McMartin> | That book I mentioned with a free C compiler on a floppy in the back of the book was published in 1988. |
02:37 | < Shiz> | maybe because you were younger |
02:37 | <@Tarinaky> | Plus the expectations of a program were smaller in the 80s. |
02:37 | <&McMartin> | Vornicus: In the 1980s, if you didn't have the basics of, er, BASIC, you could not run programs. BASIC was not only the programming language, it was in many respects the OS. |
02:38 | <&ToxicFrog> | I do not remember the 90s being particularly difficult to learn to program in, although it wasn |
02:38 | <@Tarinaky> | As a 10 year old I didn't really want to be making shitty little terminal things. |
02:38 | <&ToxicFrog> | t "you must know how to program in order to do anything at all" |
02:38 | <&McMartin> | Tarinaky: Well, as a 10 year old I was making little graphical animations |
02:38 | <&ToxicFrog> | My dad showed me that typing "logo" got me into the LOGO interpreter and at that point the turtle was mine to command. |
02:38 | <&McMartin> | GW-BASIC and its variants had graphics screens that let you draw points, lines, and circles. |
02:39 | <&McMartin> | And 16 colors, &c |
02:39 | <&ToxicFrog> | After LOGO, QBASIC, which came with existing games to dissect and modify. |
02:39 | <&McMartin> | More work to get the C64 to dance but there were worksheets you could fill in and then do some math problems, and then you had pictures you could draw and move around |
02:39 | <@Tarinaky> | For a reason I've never been able to establish the PS2 came with QBASIC :/ |
02:40 | <@Tarinaky> | On the Demos CD in the black envelope. |
02:40 | <&McMartin> | QBASIC actually got you into early-VGA level graphics capability |
02:40 | <&ToxicFrog> | ...PS/2, I think youj mean? |
02:40 | <@Reiv> | There could be a point there, McMartin |
02:40 | <@Tarinaky> | No. Sony, Playstation 2 |
02:40 | <@Reiv> | You had to learn the simplest commands to just Run The Computer |
02:41 | <@Tarinaky> | Actually, it might not have been QBASIC. |
02:41 | <@Tarinaky> | I remember it /looking/ like QBASIC though. |
02:41 | <@Reiv> | And then if you started making lines and circles on the screen it was in the same language, not much harder, and you were all Cool, I Can Draw Stuff because that was pretty much what graphics on the machine /were/ |
02:41 | <@Tarinaky> | I didn't play with it much though because using a visual keyboard with a Dualshock Controller is not fun. |
02:41 | <&McMartin> | GORILLAS.BAS is the one true demo game~ |
02:41 | <@Reiv> | Nowadays ones expectations have risen, and even the good languages are... hn, how to put it |
02:42 | <@Reiv> | You need to know a lot to start doing anything that actually qualifies as 'cool' beyond an academic sense. |
02:42 | <&McMartin> | Right |
02:42 | <@Tarinaky> | I tried to get started with Java at one point but there was no Java compiler on the school computers, which sucked. :( |
02:43 | <@Reiv> | Which is why it's importaint to teach them even younger, I suppose |
02:43 | <&McMartin> | OTOH, for grownups, there is a place for "You have worked out that you have a question you want to answer. Your first inclination is to make a 10 thousand line spreadsheet. It's time to show you how to do loops." |
02:43 | <@Reiv> | But the first time I was able to learn programming proper was, uh, 17. Friggin' school. |
02:43 | <@Tarinaky> | And, obviously, we can't have students installing software unless it's some piddly little SNES emulator. |
02:43 | <@Reiv> | Granted~ |
02:43 | <~Vornicus> | Oh, reminds me. McM: what state is Monocle in? |
02:43 | <@Reiv> | Yeah, finish up Monocle, dude~ |
02:43 | <~Vornicus> | ...I made a 19,683 line spreadsheet once, to solve tic-tac-toe... |
02:44 | <@Reiv> | And do your Really Simple Graphics Engine some point too, it had Potential~ |
02:44 | <&McMartin> | Reiv: Yeah, I've kind of been at work until 9 PM every day for awhile |
02:44 | <@Reiv> | Vornicus: And XKCD made a pretty little gif >_> |
02:44 | <~Vornicus> | well. 19,684. Headers. |
02:44 | <&McMartin> | Reiv: Not sure what you mean by Really Simple Graphics Engine |
02:44 | <@Reiv> | McMartin: Ouch, sympathies |
02:44 | <@Tarinaky> | I should have been asleep 3 hours ago. |
02:44 | < Shiz> | same |
02:44 | <@Reiv> | Your... sable spinoff |
02:44 | < Shiz> | fuck da police |
02:44 | <&McMartin> | Oh. |
02:45 | <@Reiv> | The tagline being a working graphics engine in three lines* or something |
02:45 | <&McMartin> | ... wat |
02:45 | <&McMartin> | I don't remember this |
02:45 | <@Reiv> | Well, when someone wanted to plug it in. |
02:45 | <~Vornicus> | Reiv: yeah, it stopped being 19,683 and went down to like 800 as I went through and filtered things like board symmetry and obviously illegal positions out. |
02:45 | <@Reiv> | The asterisk being that to make it fully tasty took a good deal more, but. |
02:45 | < Shiz> | my graphics engine runs in 3 lines |
02:45 | < Shiz> | import rave |
02:45 | <&McMartin> | Anyway, Monocle status: objects kind of exist |
02:45 | < Shiz> | rave.init() |
02:45 | < Shiz> | rave.run() |
02:46 | <&McMartin> | But they're being 'faked' under the hood. |
02:46 | <&McMartin> | I have a page of notes for how to unfake it, and have had no energy to move towards it. |
02:46 | <&McMartin> | But earthball.c looks the way I intend it to look in its final form now. |
02:46 | <@Reiv> | Good luck, sirrah |
02:48 | <&McMartin> | Oop, I take that back |
02:48 | <&McMartin> | There's one change that will ultimately happen |
02:48 | <&McMartin> | All references to the "earth" variable will be removed, handled by "kinds can have default sprites specified in the resource map" |
02:48 | <&McMartin> | https://github.com/michaelcmartin/monocle/blob/master/demo/earthball.c |
02:49 | <~Vornicus> | Shiz: you say that and the first thing i think is the basement rave party in Homestar Runner |
02:49 | <&McMartin> | That rave song was literally a game of Centipede |
02:49 | < Shiz> | Ogredude: it stands for Really Awesome VN Engine |
02:50 | < Shiz> | :d |
02:50 | <@Reiv> | ... oggy is not here |
02:51 | <@Reiv> | So, things to do: Learn Python. Learn Unity. Start screaming. |
02:51 | | * Reiv nods sagely |
02:51 | < Shiz> | I think you can interleave the latter two |
02:51 | <@Reiv> | You kidding? Python is just as bad. |
02:51 | <@Reiv> | In sneaky, subtle ways. |
02:52 | < Shiz> | I have a few issues with Python, but nothing major. |
02:55 | <@Alek> | McM: Human Centipede? |
02:55 | <~Vornicus> | wait, the basement rave party was a game of centipede? |
02:56 | <&ToxicFrog> | I have at this point "started using Python" three times, more or less. |
02:56 | <&ToxicFrog> | C -> Python: holy shit, this is amazing. |
02:56 | <&ToxicFrog> | Lua -> Python: it's alright. |
02:56 | <&ToxicFrog> | Clojure -> Python: SOMEONE WAKE ME FROM THIS ENDLESS NIGHTMARE |
02:57 | <&McMartin> | Vornicus: So, you have the initial "oontz oontz oontz" which is the centipede steps. Then you they add the scorpion and the flea, and then to "doodleoo--doodleoodle" is totally the spider sound. |
02:57 | < Shiz> | then comes the wub wub wub |
02:57 | <&McMartin> | That's the scorpion |
02:57 | <~Vornicus> | and the system is down? |
02:57 | <&McMartin> | That's grounding The Cheat. |
02:58 | <~Vornicus> | wat |
02:58 | <&McMartin> | "I installed that lightswitch so that The Cheat could turn the lights on and off on his own. Not so that The Cheat could have lightswitch raves." |
02:59 | <&McMartin> | Anyway, roadmap for Monocle: |
02:59 | <&McMartin> | - internal mapping from string traits to numeric traits |
02:59 | <&McMartin> | - parse trait lists out of resmap files to put into that mapping |
03:00 | <&McMartin> | - Rework object subscription so that it's basically 'one set of objects per trait, nonunique' and do that instead of the current half-assed thing |
03:00 | <&McMartin> | - kinds become some lists of traits and a default appearance. Build the kind lookup map and the parser for this |
03:01 | <&McMartin> | - Rework mncl_create_object() so that it takes a kind and does the appropriate setup |
03:01 | <&McMartin> | At that point, the Earthball demo/test sequence is Entirely Finished. |
03:02 | <&McMartin> | After that, the next piece of the puzzle is collisions. |
03:02 | <@Reiv> | ToxicFrog: And yet I am not convinced I want to learn Clojure as my recutting-teeth lingua of choice~ |
03:02 | <&McMartin> | After *that*, I have a vague notion of "object sets" that I still need to work through. |
03:03 | < Shiz> | Clojure seems like the best Lisp to learn at this point in time |
03:03 | < Shiz> | the question is if you want to learn a lisp |
03:03 | <&McMartin> | (Basically, I need to be able to handle something not unlike Game Maker's "persistent rooms".) |
03:03 | <&ToxicFrog> | Reiv: yeah, that's fair |
03:03 | <&ToxicFrog> | Mainly it's just that python does a bunch of stuff that looks superficially like being FP-friendly but really isn't at all |
03:04 | <&McMartin> | Shiz: Clojure is fantastic, and while it is not all that batteries-included Gambit Scheme is very good in its place too. |
03:04 | < Shiz> | python is not an FP language |
03:04 | < Shiz> | simple as that |
03:04 | < Shiz> | it was never meant to be one |
03:04 | <&McMartin> | Python purports to be multiparadigm |
03:04 | <@Reiv> | Yeah, if I learn Python I am doing so with the assumption it is not a FP language |
03:04 | <&McMartin> | It is at this point as FP as Common Lisp |
03:04 | < Shiz> | which can mean any >1 elements in the set of { every paradigm ever } |
03:04 | <&McMartin> | Which is to say, not very, but enough so that you can hurt yoruself. |
03:04 | < Shiz> | procedural + OO = multiparadigm |
03:04 | <@Reiv> | It's OO though, correct? |
03:04 | < Shiz> | very oo |
03:04 | <&McMartin> | Yes, though a somewhat alien version. |
03:05 | < Shiz> | alien? |
03:05 | < Shiz> | my impressions were always that it's about as simula-style OO as it gets |
03:05 | < Shiz> | with metaclasses maybe, but still |
03:05 | <&McMartin> | It's waaaay closer to smalltalk OO than simula OO |
03:05 | < Shiz> | how's that? |
03:05 | <&McMartin> | The only difference between namespaces, objects, and dictionaries in Python is syntax, and an object's nominal type has no guarantee about what methods it actually does or does not have. |
03:05 | <@Reiv> | For ease of reference; which one was Java? |
03:06 | < Shiz> | simula |
03:06 | <&McMartin> | Shiz: Well, the syntax is simula-y, I'll give you that. |
03:06 | <&McMartin> | Java, C++, C#, etc: Simula |
03:06 | <&ToxicFrog> | Shiz: the thing is, it's like - it has lambdas! But they're crippled. It has closures! But they're a pain in the ass. It has map/filter/reduce! But they're deprecated. |
03:06 | <&McMartin> | Objective-C, Python, maybe Perl, maybe JS: Smalltalk |
03:06 | <&ToxicFrog> | It has a whole shitload of useful collection operations! But they all mutate the fucking thing in place and then return None so you can't even chain them |
03:06 | <&ToxicFrog> | Seriously who does that |
03:07 | < Shiz> | McMartin: if you take the latter qualifier you can argue that any dynamic language has smalltalk-style OO |
03:07 | <@Reiv> | McMartin: ... would this explain why when I went Java -> Python, I got a mild case of bafflement at times? |
03:07 | <&McMartin> | Shiz: This is exactly a thing I do. :D |
03:07 | < Shiz> | and I don't particularly see how the former is related |
03:07 | < Shiz> | everything is an object is maybe something that smalltalk does |
03:07 | < Shiz> | but that doesn't make it smalltalk-style OO |
03:07 | <&McMartin> | I tend to think of it as one step down |
03:08 | <&McMartin> | I think of Smalltalk-style OO as "you're basically throwing a selector at an object and running what comes out" |
03:08 | <&McMartin> | And of Simula-style OO as "I have a fixed set of overridable methods as dictated by my class" |
03:08 | <&McMartin> | This is both too generous to and unfair to both. |
03:08 | < Shiz> | ToxicFrog: lambdas, sure; clojures I have had no issues with, map/filter/reduce are deprecated in favour of comprehensions which are just as OO |
03:08 | < Shiz> | ToxicFrog: most useful collection operations I've seen were in fact not inplace |
03:08 | <&McMartin> | You can't reduce with comprehensions, can you? |
03:08 | < Shiz> | like sorted(), enumerate(), etc |
03:09 | < Shiz> | McMartin: fair enough; no |
03:09 | < Shiz> | not nicely, anyway |
03:09 | < Shiz> | also reversed() |
03:09 | <&McMartin> | Yeah |
03:09 | <~Vornicus> | Reduce can't be done with comprehensions. |
03:09 | <~Vornicus> | map and filter yes. |
03:09 | <&McMartin> | Anyway, it's real common in Python to mess with getattr() and friends to make it so that some objects can have literally any function invoked on them |
03:09 | < Shiz> | >just as OO |
03:09 | <@Reiv> | Oh, hm |
03:09 | < Shiz> | meant to say just as FP |
03:09 | <&McMartin> | That's a thing I think of as super-smalltalky |
03:10 | < Shiz> | I don't think it's particularly common |
03:10 | <@Reiv> | I now try to remember what was the issue with Python last time I used it |
03:10 | < Shiz> | it's a possibility but I'd say the vast majority does not in fact use it |
03:10 | <&McMartin> | Well, OK, yes |
03:10 | <&McMartin> | "real common" for a technique that terrible isn't all that actually frequent~ |
03:10 | <@Reiv> | I think it was, uh, I wanted an Array, and to reference what was in the Array, and it told me I wasn't allowed, or something. Because dictionaries are different. |
03:11 | < Shiz> | sentence parsing failed; possible syntax error |
03:11 | <@Reiv> | Yes, I got that a lot in Python too~ |
03:11 | <~Vornicus> | Reiv: were you trying to do something like a = [1, a[0]+1]? |
03:12 | < Shiz> | I think I'd need an example to understand what you mean |
03:12 | <~Vornicus> | that wouldn't work in java or python. |
03:12 | < Shiz> | or most languages |
03:12 | <&ToxicFrog> | Not only can you not reduce with comprehensions, they only work on lists, not other collection types |
03:12 | < Shiz> | uh, what |
03:13 | <&McMartin> | Not true as of 2.7 |
03:13 | < Shiz> | and python 3 |
03:13 | < Shiz> | which you should REALLY be using |
03:13 | <&McMartin> | Python 3 is a different languaeg |
03:13 | <&McMartin> | Shiz: Anyway, going back a bit; the Gambit Scheme compiler produces *really* fast code; it emits raw C but manages to keep full first-class continuations and tail-call elimination |
03:13 | <@Reiv> | Vornicus: No, and you were in fact helping me with the workaround |
03:13 | <&ToxicFrog> | McMartin: we're using 2.7 and I'm pretty sure I remember trying to write a dictionary comprehension and it not working. |
03:13 | < Shiz> | I've heard of Gambit |
03:13 | <&ToxicFrog> | And I am damn sure python has no such thing as a set comprehension. |
03:13 | <~Vornicus> | ToxicFrog: comprehensions can now create sets and dictionaries. you can also get iterators out of them |
03:13 | < Shiz> | ToxicFrog: I can guarantee dict comprehensions work |
03:13 | <&McMartin> | Dictionary Comprehensions are totally a thing they added in 2.7 |
03:13 | < Shiz> | ToxicFrog: and it does |
03:14 | < Shiz> | i think |
03:14 | <@Reiv> | It's been so long though I no longer remember what it was that messed me up with my Cunning Plan |
03:14 | < Shiz> | :v |
03:14 | < Shiz> | well |
03:14 | < Shiz> | do you mean creating a set? |
03:14 | < Shiz> | if so, no, but you can do set([ <listcomp> ]) |
03:14 | <~Vornicus> | Set comprehensions, and set literals, both exist in current python |
03:14 | < Shiz> | I don't think set comprehensions make a lot of sense |
03:14 | <~Vornicus> | They do. I use them relatively often |
03:14 | <&McMartin> | >>> { a: a*a for a in range(10) } |
03:14 | <&McMartin> | {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81} |
03:15 | <&ToxicFrog> | McMartin: huh. |
03:15 | <&ToxicFrog> | Maybe I was working on some legacy 2.6 thing without realizing it. |
03:15 | <&McMartin> | Possible |
03:15 | < Shiz> | I have to say that my only experience in python is 2.7+/3+ |
03:15 | < Shiz> | :P |
03:15 | <&McMartin> | Ophis I've deliberately restricted to 2.3 features |
03:15 | < Shiz> | oh my |
03:15 | <~Vornicus> | >>> {a*a for a in range(10)} |
03:15 | <~Vornicus> | set([0, 1, 4, 81, 64, 9, 16, 49, 25, 36]) |
03:15 | < Shiz> | Vornicus: huh |
03:16 | < Shiz> | another thing learnt |
03:16 | < Shiz> | :) |
03:16 | <&McMartin> | (Ophis was initially written when 2.1 was the latest version) |
03:16 | <&ToxicFrog> | Huh. |
03:16 | <&McMartin> | (When I updated it, I decided to bump the requirements but I didn't want to do so gratuitously) |
03:16 | <&McMartin> | (I deemed having access to True and False to be non-gratuitous.) |
03:16 | < Shiz> | lol |
03:16 | < Shiz> | remember isinstance(bool, int) |
03:16 | < Shiz> | I was disappointed they didn't fix that in py3k |
03:17 | <&McMartin> | Pretty sure I never used isinstance |
03:17 | < Shiz> | well what I just meant is that bool is a subclass of int |
03:17 | < Shiz> | even in modern py3 |
03:17 | <&McMartin> | I *did* do the "accept almost any method call and forward to UnknownMethod if you don't have it" trick when defining assembler passes, though |
03:18 | <&McMartin> | Which made defined passes pretty clear because they'd only define the important-to-them ones. |
03:18 | <~Vornicus> | heh. True and False once screwed me up |
03:19 | < Shiz> | True + True = 2 |
03:19 | < Shiz> | fun times |
03:20 | <&McMartin> | True + True = Twoo |
03:20 | <&McMartin> | Anyway, yeah |
03:21 | <&McMartin> | For Ophis, most of the other bits are like "well, I *could* rewrite it to use dictionary comprehensions and set literals, but that's doing *more work* to make it run in *fewer places*, so why am I doing this again" |
03:21 | <&ToxicFrog> | Anyways. This is somewhat distracting from my original point, which is that python feels close enough to be clojure to be really jarring when it does something differently, in a more limited way, or not at all. |
03:22 | < Shiz> | well I agree with the lambda part |
03:22 | <&ToxicFrog> | Basically I keep trying to write Clojure code in Python and then being annoyed when e.g. it fails because lists are mutable or because the GIL exists. |
03:22 | < Shiz> | but I don't really care about having no reduce() myself |
03:22 | <&ToxicFrog> | Whereas I don't have this problem, say, going from Clojure to Lua, because Lua doesn't even attempt to do the stuff that I find jarring in Python. |
03:22 | < Shiz> | except proper lambdas |
03:22 | < Shiz> | ;_; |
03:23 | <&ToxicFrog> | Well, yes. But Lua lambdas are so ugly and verbose to write :( |
03:23 | < Shiz> | function(args) ... end, no? |
03:23 | <&ToxicFrog> | Yes. |
03:23 | <&ToxicFrog> | Compare function(x,y) return x+y end to #(+ % %) |
03:24 | < Shiz> | so in another channel I changed my nickname to ok_ a few days back and forgot to never change it back |
03:24 | < Shiz> | forgot to change it back |
03:24 | < Shiz> | http://pastie.org/pastes/8546296/text |
03:24 | < Shiz> | ToxicFrog: I see a function that is readable and a function that isn't |
03:24 | < Shiz> | :P |
03:24 | <&ToxicFrog> | Generally any place in Lua where you want a lambda, what you actually want for readability is a named local function. |
03:24 | <&ToxicFrog> | Because otherwise you get excessively long lines where most of the line is actually 'function' and flow control keywords. |
03:37 | | Vornicus [Vorn@Nightstar-28h42k.sd.cox.net] has quit [[NS] Quit: Leaving] |
03:48 | < Syka> | whee |
03:48 | | * Syka does horrible things with python |
03:51 | <@Alek> | Syka things? |
03:53 | < Syka> | nuh uh |
03:53 | < Syka> | i am made from sugar and spice, and all things nice |
03:53 | < Syka> | like mangling python __name__ and programatically adding decorators |
03:57 | <&Derakon> | "Programatically adding decorators" => "for key, val in self.__dict__.iteritems(): if callable(val): self.__dict__[key] = makeDecoratedFunc(val)" |
03:57 | <&Derakon> | I've done stuff like that before. |
03:57 | <&Derakon> | Mostly for wrapping library functions, mind. |
03:58 | < Syka> | yep |
03:58 | < Syka> | kinda like that |
04:41 | | Kindamoody[zZz] is now known as Kindamoody |
05:04 | | Derakon is now known as Derakon[AFK] |
05:09 | | Vornicus [vorn@Nightstar-sn7kve.sd.cox.net] has joined #code |
05:09 | | mode/#code [+qo Vornicus Vornicus] by ChanServ |
05:14 | | * McMartin makes it home isn't really feeling like videogames. |
05:14 | <&McMartin> | Maybe I will do some Monocle hacking. |
05:38 | <&ToxicFrog> | I am now really feeling like Warship Gunner 2, but the PS2 is in the other room, Durandal doesn't have enough beef for it yet, and there's a kitten on my legs. |
05:54 | | ErikMesoy|sleep is now known as ErikMesoy |
05:57 | <&McMartin> | Should the list of traits on objects be implicit? |
06:10 | | * McMartin uses a pointer field to store integers instead, adds a few decades to his time in purgatory after his death |
06:14 | | Kindamoody is now known as Kindamoody|out |
06:14 | | cpux|2 [cpux@Nightstar-uvch6j.dyn.optonline.net] has joined #code |
06:17 | | cpux [cpux@Nightstar-uvch6j.dyn.optonline.net] has quit [Ping timeout: 121 seconds] |
06:27 | | cpux|2 [cpux@Nightstar-uvch6j.dyn.optonline.net] has quit [Connection closed] |
06:28 | | cpux|2 [cpux@Nightstar-uvch6j.dyn.optonline.net] has joined #code |
06:33 | | himi [fow035@Nightstar-q9amk4.ffp.csiro.au] has quit [Ping timeout: 121 seconds] |
06:36 | | Stalker [Z@Nightstar-484uip.cust.comxnet.dk] has joined #code |
06:47 | | RichyB [RichyB@Nightstar-c6u.vd5.170.83.IP] has quit [[NS] Quit: Gone.] |
06:49 | | celticminstrel [celticminst@Nightstar-gj43l1.dsl.bell.ca] has quit [[NS] Quit: And lo! The computer falls into a deep sleep, to awake again some other day!] |
06:50 | | RichyB [RichyB@Nightstar-c6u.vd5.170.83.IP] has joined #code |
08:14 | | Stalker [Z@Nightstar-484uip.cust.comxnet.dk] has quit [Connection closed] |
08:14 | | Stalker [Z@Nightstar-484uip.cust.comxnet.dk] has joined #code |
08:17 | | cpux|2 [cpux@Nightstar-uvch6j.dyn.optonline.net] has quit [Connection reset by peer] |
08:25 | | Pandemic [VirusJTG@Nightstar-6i5vf7.sta.comporium.net] has quit [Connection reset by peer] |
08:47 | <&McMartin> | Woot |
08:47 | | * McMartin gets kinds kinda workin' |
08:47 | <&McMartin> | You can create objects with defaults based on kinds. It just needs to be tied into the event system and then I can start worrying about collisions. |
08:47 | <~Vornicus> | kinda kinds |
08:48 | | * Vornicus futzes with points of authority and so forth. |
09:08 | | * McMartin pushes some more Monocularity. |
09:09 | <&McMartin> | Changed the API of one public function; everything else is internal logic or changes in the data you feed it. |
09:09 | | * Vornicus tries to figure out why he's so afraid of double links |
09:10 | <&McMartin> | Who, me? |
09:10 | <&McMartin> | They fuck with reference counting garbage collectors, I guess~ |
09:10 | <~Vornicus> | well, me, really |
09:12 | <~Vornicus> | But I mean: board, players. board needs to know what spots are controlled by players; players need to know what spots they control. the "obvious" way would be for board to have links to the players for each spot, and for players to have links to the spots. |
09:12 | <~Vornicus> | but it feels like that can go wrong too easily? |
09:12 | <&McMartin> | Oh! |
09:13 | <&McMartin> | You don't like double links becuase they are *circular dependencies across data structures* and if you have those showing up somewhere that implies you haven't modularized things properly. |
09:13 | <~Vornicus> | that sounds plausible. |
09:14 | <&McMartin> | But what you describe doesn't have that problem. |
09:14 | <&McMartin> | The board can even maintain a spot->player map and you won't have that problem. |
09:15 | <&McMartin> | Though as this goes on you'll start losing single-point-of-truth properties. |
09:15 | <&McMartin> | Those are nice to have, but not when you have to index over multiple fields at once. =P |
09:15 | <~Vornicus> | Truth. |
09:16 | <&McMartin> | Anyway, hooray, net +200LOC tonight, much of it awful JSON destructuring |
09:16 | <&McMartin> | https://github.com/michaelcmartin/monocle/commit/7206cdfc51f2c588cbb516ad5cdc1bd f512aa211 |
09:16 | <~Vornicus> | woot |
09:16 | <&McMartin> | I'm not proud of kind_alloc |
09:17 | <&McMartin> | I *am* rather happy with what it lets me do with earthball.c |
09:17 | <~Vornicus> | Thank you, by the way, I needed to hear "doesn't have that problem" |
09:22 | | * McMartin grumps at valgrind |
09:22 | <&McMartin> | ==2019== 132 bytes in 4 blocks are definitely lost in loss record 1,994 of 3,651 |
09:22 | <&McMartin> | ==2019== at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) |
09:22 | <&McMartin> | ==2019== by 0x72D6F17: XGetWindowProperty (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0) |
09:22 | <&McMartin> | ==2019== by 0x54BC82D: X11_DispatchEvent (SDL_x11events.c:532) |
09:22 | <&McMartin> | ==2019== by 0x54BD033: X11_PumpEvents (SDL_x11events.c:982) |
09:22 | <&McMartin> | ==2019== by 0x543AF96: SDL_PumpEvents (SDL_events.c:402) |
09:22 | <&McMartin> | ==2019== by 0x543AFFC: SDL_WaitEventTimeout (SDL_events.c:435) |
09:22 | <&McMartin> | ==2019== by 0x4E35599: mncl_pop_global_event (event.c:101) |
09:22 | <&McMartin> | ==2019== by 0x40114F: main (earthball.c:74) |
09:22 | <&McMartin> | SDL_WaitEvent takes a pointer to a structure that it then fills in. I'm not sure how I deal with this. |
09:24 | <&McMartin> | Also, apparently zlib has a "conditional jump or move depends on uninitialized value(s)" |
09:24 | <~Vornicus> | wtf |
09:31 | <&McMartin> | Mmm. The amount being "possibly lost" is happening in functions like GL_RenderCopy and it remains the same regardless of how long I leave it running. |
09:31 | <&McMartin> | I begin to suspect Valgrind may be confused. |
09:33 | | You're now known as TheWatcher |
09:33 | <&McMartin> | Man, it's too bad I went with class-based inheritance instead of prototype-based inheritance for this system. Otherwise I could call this submodule the Cloning Vats. |
09:35 | <~Vornicus> | a shame. |
09:36 | <&McMartin> | All the other names for it are kind of obscene. |
09:37 | <&McMartin> | It is Very Bad (tm) to modify a collection as you are iterating through it, but it has to be legal to create and destroy objects mid-iteration through the object list (since this is often the result of an event being sent to you). So I need to maintain a chamber where newly-created objects live until the iterations end at which point they can be dumped in. |
09:37 | <&McMartin> | And another which means "ignore events fired at this object until the end of the iteration, then remove all references to this object from your iterables" |
09:46 | | himi [fow035@Nightstar-v37cpe.internode.on.net] has joined #code |
09:46 | | mode/#code [+o himi] by ChanServ |
10:08 | | Thalasleep [thalass@Nightstar-2vl6a3.bigpond.net.au] has joined #code |
10:36 | < simon_> | C is strictly pass-by-value, right? |
10:37 | < simon_> | I mean, when you do something like 'char[] x = "Hello"; f(x);', you'd explain this by saying that it's syntax sugar for 'char *x = "Hello"; f(x);' where x is a value containing the address of the string. or? |
10:56 | | Thalasleep is now known as Thalass|netbook |
11:10 | <&McMartin> | simon_: Precisely so |
11:11 | <&McMartin> | Though there is a very subtle difference between char[] x = "Hello" and char *x = "Hello"; the former allocates a six-byte array on the stack and the latter allocates a four or eight-byte pointer into the program's constant space |
11:11 | <&McMartin> | But f will see a pointer either into the constant space or into the stack, and both just look like pointers to f |
11:19 | <&McMartin> | (This generally only matters when declaring globals) |
11:21 | <@TheWatcher> | (also, 'char x[] = "Hello";' to be pedantic~) |
11:22 | <&McMartin> | well, yes |
11:27 | | Vornicus [vorn@Nightstar-sn7kve.sd.cox.net] has quit [[NS] Quit: Leaving] |
11:32 | | * TheWatcher flails at this change request |
11:34 | <@TheWatcher> | At the very core, this is a simple thing to do. But tracing all the places that need to be updated to handle it.. ugh |
12:12 | | VirusJTG [VirusJTG@Nightstar-6i5vf7.sta.comporium.net] has joined #code |
12:48 | | Syka [the@Nightstar-19nmr3.iinet.net.au] has quit [[NS] Quit: leaving] |
12:48 | | Syka [the@Nightstar-19nmr3.iinet.net.au] has joined #code |
13:20 | | VirusJTG_ [VirusJTG@Nightstar-6i5vf7.sta.comporium.net] has joined #code |
13:20 | | VirusJTG [VirusJTG@Nightstar-6i5vf7.sta.comporium.net] has quit [Ping timeout: 121 seconds] |
13:24 | | Thalass|netbook [thalass@Nightstar-2vl6a3.bigpond.net.au] has quit [[NS] Quit: Leaving] |
14:13 | | redwire [redwire@Nightstar-27dppb.nl.bellaliant.net] has joined #code |
14:15 | <@Tarinaky> | http://www.dilbert.com/dyn/str_strip/000000000/00000000/0000000/200000/00000/600 0/400/206401/206401.strip.gif |
14:16 | < AnnoDomini> | /000000000/00000000/0000000/ |
14:18 | <@TheWatcher> | AD: yep. Never expect anything sane from Dilber's web presence. |
14:18 | <@TheWatcher> | +t |
14:18 | <@Tarinaky> | Blame the BHP |
14:18 | <@Tarinaky> | *PHB |
14:19 | <@TheWatcher> | The RSS is hilarious now |
14:54 | | celticminstrel [celticminst@Nightstar-gj43l1.dsl.bell.ca] has joined #code |
14:54 | | mode/#code [+o celticminstrel] by ChanServ |
15:02 | < ErikMesoy> | Blame the PHP? |
15:13 | <@Tarinaky> | And the PCMCIA |
15:13 | <@Tarinaky> | (people cannot memorise computer industry acronyms) |
15:20 | <@TheWatcher> | (Pfft) |
15:21 | < AnnoDomini> | (Poles vocalize that one as "PCiMCIA" which is possible to say.) |
15:23 | <@Tarinaky> | export US3R=id10T |
15:26 | | Stalker [Z@Nightstar-484uip.cust.comxnet.dk] has quit [Ping timeout: 121 seconds] |
15:37 | <@TheWatcher> | Well, shit |
15:39 | <@TheWatcher> | CODICIL WINTER HILL uses a metadata context hierarchy to implement a roles based access control system. Works fine, provides far more flexibility than the system needs. Until now, each feed has a context associated with it and users are given roles attached to that context - posting, admin rights, etc. Each article published in the feed gets a metadata context that is a child of the feed one, so that admin rights automatically inherit. |
15:40 | <@TheWatcher> | Except that now I've got the "We want to publish a single article in multiple feeds simultaneously" request. Which mostly works, except now there's potentially multiple parent contexts for a single article |
15:40 | <@TheWatcher> | This is hilariously horrible. |
15:41 | <@TheWatcher> | Or I pick one context, and potentially exclude feed admins from editing an article that has been added to their feed. |
15:47 | <@TheWatcher> | Fuck it, I'll see if my brain'll work this one out, time to do some woodcarving. |
16:05 | < AnnoDomini> | It seems that running the game with the diagnostic distance grid dump to stout.txt not commented out results in Dropbox crashing. |
16:07 | | Stalker [Z@Nightstar-ro94ms.balk.dk] has joined #code |
16:17 | < AnnoDomini> | Whee! These dungeons actually look like dungeons! |
16:20 | <@celticminstrel> | Amazing! |
16:21 | < ErikMesoy> | pics? |
16:25 | < AnnoDomini> | http://oi42.tinypic.com/2lmv42r.jpg |
16:42 | < AnnoDomini> | Now with doors: http://oi44.tinypic.com/34t7by0.jpg |
16:51 | < Syka> | AnnoDomini: btw, imgur doesn't have a load of crap on it when you're linking pictures |
16:52 | < Syka> | (or uploading them) |
16:52 | < AnnoDomini> | Actually, it does. |
16:52 | < AnnoDomini> | I have to load the frontpage when I want to upload something. |
16:53 | < AnnoDomini> | As I'm currently on limited bandwidth, I gave up waiting for all the bloody thumbnails to load. |
16:53 | < AnnoDomini> | (It doesn't work unless everything loads. Because the upload script is apparently last to be loaded.) |
16:55 | < Syka> | hm |
16:55 | < Syka> | AnnoDomini: if it helps, the upload is on every page |
16:56 | < Syka> | eg http://imgur.com/tos |
16:56 | < Syka> | i thought they had a straight upload page |
16:56 | < Syka> | hm |
16:56 | < AnnoDomini> | I don't see any upload interface on the page you linked. |
16:56 | < Syka> | AnnoDomini: top left |
16:57 | < Syka> | cloud with an arrow |
16:57 | < AnnoDomini> | Oh, that thing. |
16:57 | < AnnoDomini> | OK, that is better. |
16:59 | | Turaiel[Offline] is now known as Turaiel |
17:11 | | Kindamoody|out is now known as Kindamoody |
17:20 | <@Tarinaky> | There's a shell-script out there to upload to imgur from the cli. |
17:32 | < Syka> | hmm |
17:32 | < Syka> | question for people |
17:32 | < Syka> | i'm writing an api framework, and it comes with a self-documenter |
17:33 | < Syka> | in html |
17:33 | < Syka> | should i include local copies of the CSS/JS frameworks? |
17:35 | < AnnoDomini> | #include allthething.jpg |
17:42 | < RichyB> | include all the things, yes |
17:42 | < RichyB> | If you don't then your docs will be useless if I'm reading them off-line. |
17:47 | < AnnoDomini> | ;_; |
17:47 | < AnnoDomini> | I may have accidentally given good advice in jest. |
17:54 | < Syka> | okay then |
17:54 | | * Syka decides that |
18:22 | | Kindamoody is now known as Kindamoody|afk |
18:47 | | Turaiel is now known as Turaiel[Offline] |
19:52 | | Vornicus [vorn@Nightstar-sn7kve.sd.cox.net] has joined #code |
19:52 | | mode/#code [+qo Vornicus Vornicus] by ChanServ |
20:17 | | Syloq [Syloq@Nightstar-ujl.ett.136.198.IP] has quit [Ping timeout: 121 seconds] |
20:22 | | Syloq [Syloq@Nightstar-ujl.ett.136.198.IP] has joined #code |
20:22 | | mode/#code [+o Syloq] by ChanServ |
20:35 | | * TheWatcher eyes this bug in a student's code |
20:35 | <@TheWatcher> | ... feof() is returning false when it should be returning true, wtf |
20:35 | < AnnoDomini> | What's feof() do? |
20:35 | <&McMartin> | ... is that a bug in the student's code? |
20:35 | < ErikMesoy> | Enfeoffs someone, it sounds like |
20:35 | <@celticminstrel> | Maybe there's extra newlines at the end of file? |
20:35 | < ErikMesoy> | Is this feudal code? |
20:35 | <&McMartin> | AD: Checks for end of file |
20:36 | < ErikMesoy> | To enfeoff means to give someone a fief, making them a feoffee. |
20:36 | <@celticminstrel> | ... |
20:37 | < ErikMesoy> | Okay, other hypothesis: feof() stands for False End Of File, hence the values are inverted. |
20:38 | <&McMartin> | I think it's actually file end of file -_- |
20:38 | <&McMartin> | to go with fread and fopen |
20:41 | <@celticminstrel> | Yeah. |
20:43 | <@Tarinaky> | The Redundant Department for Redundant Acronym Redundancies. |
20:43 | | Stalker [Z@Nightstar-ro94ms.balk.dk] has quit [Ping timeout: 121 seconds] |
20:46 | | Syloq [Syloq@Nightstar-ujl.ett.136.198.IP] has quit [[NS] Quit: .] |
20:46 | | Syloq [Syloq@Nightstar-ujl.ett.136.198.IP] has joined #code |
20:46 | | mode/#code [+o Syloq] by ChanServ |
21:05 | <&McMartin> | Bleh. After sleeping on it, I'm a little less happy with how traits work in Monocle. |
21:05 | <@Tarinaky> | Or, for short, the RDRAR Department. |
21:28 | | Kindamoody|afk is now known as Kindamoody |
21:52 | | Kindamoody is now known as Kindamoody[zZz] |
21:56 | | gnolam [lenin@Nightstar-ii43bc.cust.bredband2.com] has joined #code |
21:56 | | mode/#code [+o gnolam] by ChanServ |
22:00 | | Orthia [orthianz@Nightstar-avg.1ee.224.119.IP] has quit [Ping timeout: 121 seconds] |
22:00 | <@Reiv> | Hey now, let's be fair |
22:00 | <@Reiv> | I've been known to label things t_tab on a friday afternoon |
22:01 | <@Reiv> | Thus helpfully denoting that the table named table is in fact a table |
22:01 | <@Reiv> | But fuck it, it matched the pattern and the name was irrelevant~ |
22:03 | | Turaiel[Offline] is now known as Turaiel |
22:04 | < Shiz> | 3/w 21 |
22:08 | | himi [fow035@Nightstar-v37cpe.internode.on.net] has quit [Ping timeout: 121 seconds] |
22:33 | | ErikMesoy is now known as ErikMesoy|sleep |
22:37 | | gnolam [lenin@Nightstar-ii43bc.cust.bredband2.com] has quit [[NS] Quit: Gone] |
22:37 | | dmiles_akf [dmiles@Nightstar-hdcn1r.or.comcast.net] has quit [Connection reset by peer] |
22:39 | | dmiles_afk [dmiles@Nightstar-hdcn1r.or.comcast.net] has joined #code |
22:41 | | Turaiel is now known as Turaiel[Offline] |
23:32 | < AnnoDomini> | foo = foo ^ !bar; // Assuming bar is all 0s except one bit, this will eliminate it from foo, yes? |
23:34 | < redwire> | No |
23:35 | < AnnoDomini> | ~? |
23:36 | < redwire> | Suppose foo = 0b1011 and bar = 0b1000, then foo ^ ~bar (what you meant) would be 0b1011 ^ 0b0111 = 0b1100. |
23:36 | < redwire> | I don't think that's what you want. |
23:36 | <@celticminstrel> | Don't you want &~? |
23:37 | < AnnoDomini> | Oh, yeah! That! |
23:38 | < redwire> | 0b1011 & ~0b1000 = 0b1011 & 0b0111 = 0b0011. Indeed. |
23:38 | < AnnoDomini> | (Further annoying because this keyboard has a & printed on the ^ button.) |
23:38 | <@celticminstrel> | I like to bind it together as if it's a single operator: 0b1011 &~ 0b1000 |
23:39 | < AnnoDomini> | Are you using Urbit runes? :P |
23:39 | <@celticminstrel> | ? |
23:41 | < AnnoDomini> | http://www.urbit.org/ |
23:45 | | himi [fow035@Nightstar-q9amk4.ffp.csiro.au] has joined #code |
23:45 | | mode/#code [+o himi] by ChanServ |
23:56 | <@celticminstrel> | I don't get it. |
--- Log closed Fri Dec 13 00:00:21 2013 |