code logs -> 2013 -> Thu, 12 Dec 2013< code.20131211.log - code.20131213.log >
--- 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
code logs -> 2013 -> Thu, 12 Dec 2013< code.20131211.log - code.20131213.log >

[ Latest log file ]