code logs -> 2010 -> Wed, 03 Mar 2010< code.20100302.log - code.20100304.log >
--- Log opened Wed Mar 03 00:00:00 2010
--- Day changed Wed Mar 03 2010
00:00
< gnolam>
The latter.
00:00
<@McMartin>
There's some ugly corner cases there but I've faced them for UQM and Sable; I might be able to help if you've got specific issues.
00:00
< gnolam>
Not only do the docs leave out half the information you need, but it also flat-out lies.
00:00
<@McMartin>
Also, are you using a Matrox card~
00:01
<@McMartin>
Some of the ugly corner cases involve graphics drivers lying~
00:01
< gnolam>
Oh, it's /working/.
00:02
< gnolam>
It's just impossible to know if it working is something that can be depended on, because the docs only give you half the information you need.
00:02
<@McMartin>
For UQM we absolutely had to do a dedicated effort to run benchmarks, both speed and accuracy, on as wide a set of machines and OSes as possible.
00:03
<@McMartin>
What is it, precisely, that you're trying to do, though?
00:06
< gnolam>
It seems the SDL documentation process goes something like "- So, should we document our return values? - Nah, too much work. - Default values then? - Pfft, who would /ever/ need that? - Umm... listing /all/ available enums for the GL attributes, maybe? - But then we'd have to look up what they do! - Ok, how about making sure the types we claim the functions have are actually correct? - Boooooring!"
00:07
<@McMartin>
You still haven't actually answered my question.
00:08
< gnolam>
What I'm doing right now is cleaning up old code, and making sure it's actually correct.
00:08
<@McMartin>
My recollection of using SDL, in particular, was that after calling CreateVideoSurface everything else used the OpenGL libraries exclusively, with any communication being done via raw pixmaps.
00:08
< gnolam>
However, there's no way of knowing that, since the documentation is /shite/.
00:08
<@McMartin>
Maybe I'm being unclear
00:08
< gnolam>
Missing enums. Missing return value specifications. Incorrect return types.
00:08
<@McMartin>
Can you give a specific, explicit, concrete example?
00:09
< gnolam>
Little to no explanation of interoperation of functions.
00:09
<@McMartin>
Like, "I'm trying to verify a call to SDL_DisplayFormatAlpha() and can't figure out if its preconditions are met"
00:09
< TheWatcher>
We get you hate SDL, that does not actually provide the information that may be used to assist you
00:09
< gnolam>
Knowing if SDL_GetVideoInfo() takes GL attributes into account?
00:10
< gnolam>
Finding documentation on the SDL_GL_MULTISAMPLE* attributes?
00:11
<@McMartin>
For the former, I strongly suspect "no"
00:11
< gnolam>
Getting pissed off when SDL_VideoInfo *SDL_GetVideoInfo(void) turns out to actually be const SDL_VideoInfo *SDL_GetVideoInfo(void)?
00:11
<@McMartin>
Though if it's post-call-to-SetVideoMode, I don't know.
00:11
<@McMartin>
Um
00:11
<@McMartin>
http://www.libsdl.org/cgi/docwiki.cgi/SDL_GetVideoInfo
00:11
< TheWatcher>
It explicitly says const there
00:11
<@McMartin>
"RETURN VALUE: Returns a read-only pointer to the structure containing the information about the current video hardware. Technically, it's a constant SDL_VideoInfo pointer."
00:12
<@McMartin>
Next question: Which docs are you reading?
00:12
< gnolam>
Ach, sorry, I actually meant SDL_VideoModeOK() instead of SDL_GetVideoInfo().
00:12
< gnolam>
The ones in docs/ .
00:12
< TheWatcher>
read the wiki.
00:13
< TheWatcher>
and SDL_VideoModeOK's flags are those you pass as the flags to SDL_SetVideoMode
00:14
<@McMartin>
SetVideoMode in particular has a number of probably relevant comments about the interaction of OpenGL and video mode changes in Windows vs. Linux, as well.
00:16
< gnolam>
Wiki
00:16
< gnolam>
n. pl. wikis
00:16
< gnolam>
1. A collaborative website whose content can be edited by anyone who has access to it.
00:16
< gnolam>
2. A poor excuse for bad documentation.
00:16
< gnolam>
:P
00:17
< TheWatcher>
Um
00:17
< TheWatcher>
I'm going to choose to believe you're joking.
00:17
< gnolam>
The SDL_VideoModeOK entry appears to be identical to the local documentation.
00:18
< gnolam>
TheWatcher: Oh, I'm being perfectly serious.
00:19
< TheWatcher>
In that case, I suggest you leave open sourse alone, and go play with DirectX
00:20
< gnolam>
The reason being basically that the people editing the wiki are basically the same who would write the regular documentation.
00:20
< TheWatcher>
Incorrect
00:21
< gnolam>
It works for /some/ things. This ain't one of them. If I had a penny for every project I've come across that thought putting up a wiki would make the documentation magically write itself, I'd be a rich man.
00:21
< TheWatcher>
It is quite possible - and in my personal experience, quite likely - that documentation is either written, expanded, or edited by end-users or people who just what to help.
00:21
< TheWatcher>
And, frankly, if you're so very pissed about it, you have the source. Look at it. Then go fix the documentation you're complaining about
00:23 You're now known as TheWatcher[T-2]
00:25
< gnolam>
Dammit. I normally don't like graphical emoticons, but here I would really need the "rolling eyes" smiley.
00:27 You're now known as TheWatcher[zZzZ]
00:27
< gnolam>
Getting into the intricacies of an entire project is /not/ a reasonable expectation. Having documentation that doesn't leave out important information is.
00:27 * ToxicFrog upreads
00:28
< ToxicFrog>
celticminstrel: only showing underlines when you press alt is the default behaviour; you can change it to show them all the time somehow.
00:29
< gnolam>
Especially since there's a good chance that even reading and understanding the code isn't enough. You also have to know if that behavior is the /intended/ one
00:30
< gnolam>
.
00:30
< ToxicFrog>
gnolam: what seems to be happening here is: "The docs are shit!" "Read the wiki. It's better." "No it isn't! It can't be, because wikis are terrible for documentation!"
00:31
< gnolam>
No, it's "The docs are shit!" "Read the wiki. It's better." "In the general case, that's patently untrue, and here it's a bit better but still not enough".
00:32
< ToxicFrog>
Ok, but that's really not what's coming across, and even if it were so far you've given one example of that turned out to be wrong.
00:32
< ToxicFrog>
I also can't figure out if you have an actual question about SDL's behaviour or just needed to rant.
00:32
< gnolam>
And which one was that?
00:33
< ToxicFrog>
SDL_GetVideoInfo not being const.
00:33
< gnolam>
That's the "a bit better".
00:33
< gnolam>
The "still not enough" is, for example, SDL_VideoModeOK() still not documenting what it does with GL attributes.
00:34
< ToxicFrog>
Also untrue.
00:34
< gnolam>
Oh?
00:34
< ToxicFrog>
It says it takes the same arguments as SDL_SetVideoMode.
00:34
<@McMartin>
With a link.
00:34
<@McMartin>
Which goes into considerable detail.
00:34
< gnolam>
It takes the same arguments, yes.
00:34
< gnolam>
Unfortunately, the GL attributes are not its arguments.
00:34
< ToxicFrog>
Precisely.
00:34
<@McMartin>
My expectation, based on the documentation, is that if SDL_OPENGL is set, then it will test based on the GL attributes set via GL.
00:35
<@McMartin>
That the general contract is "If you call setvideomode with these arguments right now, will it work"
00:35
<@McMartin>
That might not be true!
00:35
<@McMartin>
If it isn't, that would indeed be a bug in either SDL or the docs.
00:35
<@McMartin>
But it's not unclear,.
00:37 Rhamphoryncus [rhamph@Nightstar-8931f88f.abhsia.telus.net] has joined #code
00:37
< gnolam>
It also states that attributes take effect /after/ setting a graphics mode, and reserves the right to futz with them ("You should use SDL_GL_GetAttribute to check the values after a SDL_SetVideoMode call, since the values obtained can differ from the requested ones.").
00:38
<@McMartin>
Yes, but that is not the fault of SDL.
00:38
<@McMartin>
It is the fault of graphics card manufacturers and driver writers.
00:38
< gnolam>
Ah, but I happen to know some attributes can cause a video mode to fail.
00:38
<@McMartin>
Or, if you will, the ARB.
00:38
< gnolam>
E.g. multisampling (which, BTW, is completely undocumented in the local docs).
00:39
< gnolam>
So, will that be taken into account? I have no way of knowing.
00:39
<@McMartin>
I thought multisampling was part of the eventual scene submission, not the graphics mode.
00:39
<@McMartin>
It's possible my OpenGL knowledge is a decade out of date.
00:45
< celticminstrel>
...it looks like wxWidgets' PNG handler doesn't support saving indexed PNGs...
00:45
<@McMartin>
gnolam: That said, for UQM, our experience was that SetVideoMode would fail outright if invalid attributes were set. We were writing before VideoModeOK was part of the standard.
00:49
<@McMartin>
There's nothing stopping you from defense in depth if you don't trust the library, and having SetVideoMode's return value being NULL trigger a fallback mode.
01:04 Serah [Z@26ECB6.A4B64C.298B52.D80DA0] has quit [Ping timeout: 121 seconds]
01:46 Serah [Z@3A600C.A966FF.5BF32D.8E7ABA] has joined #code
01:55 Reiv [NSwebIRC@Nightstar-1055e8af.waikato.ac.nz] has joined #code
01:55
< Reiv>
Evening folks
01:55
< ToxicFrog>
'evening.
01:56
< ToxicFrog>
Have a closure.
01:56
< Reiv>
I have managed to cunningly forget the logic path of the following, and want to doublecheck so it behaves as intended.
01:56 * Reiv nom closure
01:59
< Reiv>
func (m,n) = { m == 0, n+1
01:59
< Reiv>
{ n == 0, func(m-1,1)
01:59
< Reiv>
{ else , func(m-1,func(m,n-1))
01:59
< Reiv>
Braces at the start being one big { one.
01:59
< Reiv>
Clarification point: For the else, it has to be neither of the first two, correct?
01:59
<@McMartin>
Yes, and for the second, it has to be not the first.
02:00
< ToxicFrog>
You read top to bottom; the first condition that is true goes off and evaluation stops there.
02:00
< Reiv>
Aaaah, thank you.
02:00 * Reiv was simply not familiar with the notation, and the one example he gave to explain it had only one if in it.
02:00
< Reiv>
awesome, cheers
02:01
< ToxicFrog>
(define (func m n) (cond [(= m 0) (+ n 1)] [(= n 0) (func (- m 1) 1)] [else (func (- m 1) (func m (- n 1)))])) lispwise
02:03
< celticminstrel>
...what dialect is that?
02:03 gnolam [lenin@Nightstar-38637aa0.priv.bahnhof.se] has quit [Ping timeout: 121 seconds]
02:04
< Reiv>
Stupid Question Time: If (foo) { } else if {bar} else {zod} would meet the above conditions, or do I Have the brackets wrong?
02:04
< celticminstrel>
The second if is missing its condition?
02:05
< Reiv>
OK, but aside from that
02:07
< ToxicFrog>
celticminstrel: Scheme.
02:07
< ToxicFrog>
PLT Scheme, I think.
02:08
< ToxicFrog>
Reiv: aside from that, yes.
02:08
< Reiv>
Excelent.
02:08
< ToxicFrog>
Indeed that style of function definition translates pretty much exactly into if/elseif/else trees.
02:08 * Reiv blargs at Java. How do I feed a '1' into a long?
02:08
<@McMartin>
long a = 1;
02:08
< Reiv>
Aha
02:08
< Reiv>
Or rather, I wanted to feed it to a function ack(m-1,1)
02:08
<@McMartin>
Should just autopromote
02:09
<@McMartin>
If it doesn't, 1L
02:14
< Reiv>
SQT: Constructor syntax?
02:14 * Reiv is trying to make this thing an object, is not sure that's a good idea but main was being unhelpful.
02:18 Attilla [Attilla@FBC920.0A905B.55C6A3.AD1094] has quit [Client closed the connection]
02:18
< ToxicFrog>
Um
02:18
< ToxicFrog>
"unhelpful" how?
02:19
< ToxicFrog>
Assuming the project is just "implement Ackermann, take args from command line", you really shouldn't need to instantiate anything.
02:19
< ToxicFrog>
That said, constructor declaration:
02:19
< ToxicFrog>
[visibility options] ClassName(arguments) {...} /* note: no return type */
02:19
< ToxicFrog>
Object instantiation: Type foo = new Type(constructor arguments);
02:21 Reiv [NSwebIRC@Nightstar-1055e8af.waikato.ac.nz] has quit [Ping timeout: 121 seconds]
02:21 gnolam [lenin@Nightstar-38637aa0.priv.bahnhof.se] has joined #code
02:23
< celticminstrel>
Aw, he's gone.
02:25
< ToxicFrog>
He'll be back.
02:28 Reiv [NSwebIRC@Nightstar-1055e8af.waikato.ac.nz] has joined #code
02:32
< ToxicFrog>
* Reiv is trying to make this thing an object, is not sure that's a good idea but main was being unhelpful.
02:32
< ToxicFrog>
<ToxicFrog> Um
02:32
< ToxicFrog>
<ToxicFrog> "unhelpful" how?
02:32
< ToxicFrog>
<ToxicFrog> Assuming the project is just "implement Ackermann, take args from command line", you really shouldn't need to instantiate anything.
02:32
< ToxicFrog>
<ToxicFrog> That said, constructor declaration:
02:32
< ToxicFrog>
<ToxicFrog> [visibility options] ClassName(arguments) {...} /* note: no return type */
02:32
< ToxicFrog>
<ToxicFrog> Object instantiation: Type foo = new Type(constructor arguments);
02:32
< ToxicFrog>
You're probaly right on it being a bad idea, though; whatever problem you're having, this is unlikely to be the solution.
02:33
<@McMartin>
What does your main declaration look for?
02:33
<@McMartin>
Er, look *like*
02:34
< ToxicFrog>
And do clarify what you mean by "unhelpful"
02:34
< Reiv>
sec
02:34 Derakon [Derakon@Nightstar-5abd3ac9.ca.comcast.net] has joined #code
02:34 mode/#code [+o Derakon] by Reiver
02:35
<@Derakon>
Remember how there's another poor lab out there that has a copy of my lab's software?
02:35
<@Derakon>
And they've been asking me for help to add a feature we have to their version?
02:35
<@Derakon>
Turns out their version's in even worse shape than ours, if you can believe it.
02:35
<@Derakon>
Ours is a Python-C++ amalgam.
02:35
<@Derakon>
Theirs is Python-C++-Java.
02:36
<@Derakon>
Poor shmucks.
02:36
<@Derakon>
Mind you, doesn't say much for my peace of mind since they continue to ask me for help.
02:36
< Vornicus>
Jesus
02:36
<@Derakon>
Most recently they tried plugging in the compiled C++ executable from the code I sent them (they were just supposed to use the Python bits, which should have been mutually compatible), and then asked me why it didn't work. *sigh*
02:37
< ToxicFrog>
This is the bit where you sacrifice a goat to Azathoth and pray for the merciful annihilation of all that is, I think.
02:37
< Reiv>
http://pastebin.starforge.co.uk/132 - what I have so far, trying to figure out how to get ack to work, so that I can then get ack to be run and print out the results.
02:38
< Reiv>
Once I have that I plan to stick it in a for loop that increments starting values of m and n for great lulz, and watch when it explodes~
02:38
<@Derakon>
...you're coding the Ackermann function?
02:38
< Reiv>
Yup!
02:38
< Reiv>
We were told to do it as homework.
02:39
<@Derakon>
I suspect you're going to run into problems with hitting your maximum recursion depth.
02:39
<@McMartin>
Reiv: main must return void.
02:39
< Reiv>
McM: That includes the functions within main?
02:39
< ToxicFrog>
Does JAva even permit nested functions?
02:39
<@McMartin>
Main is a function. It doesn't get to have functions.
02:39
<@McMartin>
ack needs to be in the class.
02:39
< Reiv>
... oh /duh/
02:39
< Reiv>
Thank you! I was being thick.
02:39
<@Derakon>
...oh, yeah, you can't do that in Java.
02:40
<@McMartin>
TF: Sort of but they are secretly classes~
02:40
< ToxicFrog>
new Runnable() { /* woe and spiders */ } ;.;
02:40
<@McMartin>
Still cleaner than C++0x lambdas~
02:40
<@Derakon>
Does Java have lambdas?
02:40
< celticminstrel>
But you can't call them like functions.
02:40
<@McMartin>
TF just quoted it.
02:40
<@Derakon>
...oh dear.
02:40
< celticminstrel>
Java is adding closures sometime, I believe.
02:40
<@Derakon>
And I thought PHP's create_function was bad.
02:41
<@McMartin>
Closures don't actually buy you anything objects don't.
02:41
<@McMartin>
And vice versa
02:41
< ToxicFrog>
Actually it's: Runnable lambda = new Runnable() { public void run() { ...code goes here... } };
02:41
< ToxicFrog>
I think run is void->void, anyways.
02:41
< Reiv>
I had botched my nesting. Thank you.
02:41
< ToxicFrog>
In conclusion, I don't like Java~
02:41
<@McMartin>
ack is also not properly defined, since it will also need to provide types
02:41
<@McMartin>
Also, as written, ack should probably be static
02:42
< Reiv>
I didn't know you could do that with a recursive function.
02:42
< ToxicFrog>
^-- both of these. You can't call non-static methods without creating an object first, and Java doesn't do type inference.
02:42
< ToxicFrog>
...how do you mean?
02:42
< Reiv>
No, TF just answered for me, thank you
02:43
< Reiv>
I had been trying to create an object to get around the non-static methods bit.
02:43
< Reiv>
Then realised I was being thick and put everything back in the main object; everything since then has been fixing my errors in there~
02:43
< ToxicFrog>
(if you mean "I didn't think you could have static recursive functions", yes you can; all static means is "you call it directly rather than as a method on an object". This is not the same as C's static keywork on function local variables.)
02:43
< Reiv>
(That answers my question, thank you)
02:44
<@McMartin>
Both of which are different from C's static keyword on function definitions
02:44
<@Derakon>
"static" is one of those keywords that is used for entirely too many things.
02:44
<@McMartin>
But this is pretty close to C++'s static keyword on fields and methods.
02:49 * Reiv eyes
02:49
< Reiv>
This program appears to have a bug.
02:49
< Reiv>
Ackermann is not meant to produce /small/ numbers, is it? >_>
02:49
<@Derakon>
This is unexpected?
02:49
<@Derakon>
Heh.
02:49
< ToxicFrog>
For very small inputs it will
02:49
< Reiv>
m = 10, n = 10 >> 10.
02:50
<@Derakon>
Yyyeah, that's wrong.
02:50
<@Derakon>
Ah.
02:50
< Vornicus>
http://en.wikipedia.org/wiki/Ackermann_function
02:50
<@Derakon>
Note what happens if m == 0.
02:50
<@Derakon>
Note also your return value.
02:50
<@Derakon>
Note also what you do with the results from your recursive steps.
02:51
< ToxicFrog>
> (A 1 1)
02:51
< ToxicFrog>
3
02:51
< ToxicFrog>
> (A 10 10)
02:51
< ToxicFrog>
...it's still running.
02:51
< Reiv>
Derakon: ... Oh, my recursion isn't actually doing anything useful is it
02:51 * Reiv tries to figure where it needs to be sticking the values.
02:52
< ToxicFrog>
It's meant to return them.
02:52
< ToxicFrog>
It's a purely recursive definition; you shouldn't have any assignments or mutators in there.
02:53
< ToxicFrog>
Take, say, the first condition: A(m,n) = { m = 0 | n+1 }
02:53
<@Derakon>
Here's Ackermann in Python: http://pastebin.starforge.co.uk/134
02:54
<@Derakon>
I'm pretty sure I did it correctly, but I so rapidly hit the recursion cap it's hard to say.
02:54
< ToxicFrog>
What this means in practice is that if you call A(0, n) for any n, it should return n+1.
02:54
< Reiv>
http://pastebin.starforge.co.uk/135 - not correct, but is it on the right track?
02:54
< ToxicFrog>
Closer!
02:54
< Reiv>
Should /each/ if statement return?
02:54
<@Derakon>
Lines 12 and 13 need return statements.
02:54
< ToxicFrog>
Yes.
02:55
< Reiv>
aha, bingo
02:55
<@Derakon>
Also, "n++" is unhelpful.
02:55
<@Derakon>
"return ++n" would technically do what you want but is still silly.
02:55
< celticminstrel>
...wouldn't that code give an error because some branches don't return?
02:55
< ToxicFrog>
If one of the condition succeeds, the corresponding value is what the function call should evaluate to - and thus, what it should return.
02:56
<@McMartin>
celticminstrel: No, because it then falls through to the "return m" statement
02:56
<@Derakon>
There's no "return m" in Reiver's latest ouvre.
02:56
< celticminstrel>
Um, what "return m" statement?
02:59
<@McMartin>
I may be looking at an older chunk of code
03:00
< Reiv>
ehehehehehe
03:00
< Reiv>
m5, n5 overflows. ^.^
03:01
< ToxicFrog>
A is awesome(?) like that.
03:01
< Reiv>
Very!
03:02
< Reiv>
And now, having completed my first little bit of code, I go to class to learn why it proves that it is impossible to prove any arbitary bit of code Totally Correct.
03:02
< Reiv>
Thank you!
03:02
< Reiv>
And apologies for the Stupid Questions. <g>
03:03
<@Derakon>
No worries.
03:03 Reiv [NSwebIRC@Nightstar-1055e8af.waikato.ac.nz] has quit [[NS] Quit: classtiem]
03:09 gnolam [lenin@Nightstar-38637aa0.priv.bahnhof.se] has quit [[NS] Quit: Z?]
04:33 celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has quit [[NS] Quit: *hums* Can't stay now!]
05:37 Vornicus is now known as Vornicus-Latens
05:39 Orthia [orthianz@Nightstar-5f618da7.xnet.co.nz] has joined #code
06:18 AnnoDomini [annodomini@Nightstar-3c34be84.adsl.tpnet.pl] has joined #code
06:18 mode/#code [+o AnnoDomini] by Reiver
06:20
< Orthia>
So
06:21
< Orthia>
Mergesort of Quicksort: Most straightforward to implement?
06:21
<@Derakon>
...wow, I've forgotten my sorting algorithms. ¬.¬
06:21
<@Derakon>
I mean, I remember generally how Quicksort works.
06:22
<@Derakon>
But these days I just call the language's built-in sort() function. Sometimes I have to write a comparator function to go with it.
06:22
<@AnnoDomini>
http://www.youtube.com/watch?v=YvTW7341kpA
06:22
<@AnnoDomini>
Orthia: Use Bubble Sort. FEELS GOOD MAN.
06:22
< ToxicFrog>
Quicksort is,IMO,much simpler to implement than mergesort.
06:23
< ToxicFrog>
It's been a while since I did either, though.
06:23
< ToxicFrog>
Bubblesort is even simpler but is O(n^2) rather than O(nlogn)
06:24
< Orthia>
I was trying to pick a n*logn sorter, yeah.
06:26
< ToxicFrog>
Your best bets are heapsort, mergesort or quicksort, then.
06:26
< ToxicFrog>
Is this personal interest, or an assignment?
06:28 Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has joined #code
06:33 Derakon is now known as Derakon[AFK]
06:54
< Rhamphoryncus>
Orthia: out of curiosity, what language are you using that requires you to write your own sort?
06:56
< ToxicFrog>
Rhamphoryncus: it's coursework.
06:56
< Rhamphoryncus>
oh
06:57 * Rhamphoryncus would be fighting the urge to do a hybrid adaptive merge sort
06:58
< Rhamphoryncus>
But if it was a specific type like 32 bit ints I might go more specialized
07:04 Orthia [orthianz@Nightstar-5f618da7.xnet.co.nz] has quit [Client closed the connection]
07:10 Orthia [orthianz@Nightstar-5f618da7.xnet.co.nz] has joined #code
07:10 Orthia [orthianz@Nightstar-5f618da7.xnet.co.nz] has quit [Connection reset by peer]
07:15 Serah [Z@3A600C.A966FF.5BF32D.8E7ABA] has quit [Ping timeout: 121 seconds]
07:18 Orthia [orthianz@Nightstar-5f618da7.xnet.co.nz] has joined #code
07:21 Serah [Z@3A600C.A966FF.5BF32D.8E7ABA] has joined #code
07:31 Orthia [orthianz@Nightstar-5f618da7.xnet.co.nz] has quit [Connection reset by peer]
07:37 Orthia [orthianz@Nightstar-5f618da7.xnet.co.nz] has joined #code
07:47 Orthia [orthianz@Nightstar-5f618da7.xnet.co.nz] has quit [Connection reset by peer]
07:48 Orthia [orthianz@Nightstar-5f618da7.xnet.co.nz] has joined #code
07:48
< Orthia>
ToxicFrog: Sort of both.
07:49
< Orthia>
We were demonstrated n*logn workings in class, and expected to know how they function properly by next class (monday).
07:49
< Orthia>
I figure one might as well learn by doing...
07:53
< Orthia>
If not fully featured, then at least the general function thereof.
09:29 You're now known as TheWatcher
09:57 Attilla [Attilla@FBC920.0A905B.55C6A3.AD1094] has joined #code
09:57 mode/#code [+o Attilla] by Reiver
10:09 Orth [orthianz@Nightstar-a25515d3.xnet.co.nz] has joined #code
10:11 Orthia [orthianz@Nightstar-5f618da7.xnet.co.nz] has quit [Ping timeout: 121 seconds]
10:27 Zed [Zed@Nightstar-d0088b95.or.comcast.net] has joined #code
11:50 celmin [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has joined #code
12:14 * TheWatcher ugghs at SQL
12:19 Rhamphoryncus [rhamph@Nightstar-8931f88f.abhsia.telus.net] has quit [Client exited]
12:26 celmin is now known as celticminstrel
12:30 celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has quit [[NS] Quit: *hums* Can't stay now!]
12:40 Tarinaky [Tarinaky@Nightstar-f5fce989.adsl.virginmedia.net] has quit [Operation timed out]
12:41 gnolam [lenin@Nightstar-38637aa0.priv.bahnhof.se] has joined #code
12:55 Tarinaky [Tarinaky@Nightstar-28f7cb92.adsl.virginmedia.net] has joined #code
13:33 AnnoDomini [annodomini@Nightstar-3c34be84.adsl.tpnet.pl] has quit [Ping timeout: 121 seconds]
14:49 Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has quit [Client closed the connection]
15:35 AnnoDomini [annodomini@Nightstar-489a1c1a.adsl.tpnet.pl] has joined #code
15:35 mode/#code [+o AnnoDomini] by Reiver
16:20
<@AnnoDomini>
Gnar.
16:20
<@AnnoDomini>
These lab instructions are dated.
16:21
<@AnnoDomini>
"Insert system floppy."
16:28
< Tarinaky>
Wow.
16:29
< TheWatcher>
That's... pretty impressive
16:29
< gnolam>
"Press play on tape"
16:31
< ToxicFrog>
Orth: good plan.
16:34
< gnolam>
That said, I have actually used floppies during labs. But only on the ye olde (but still awesome) logic analyzers.
16:35
< Tarinaky>
Our logic analysers have Windows 2k on them :x
16:35
< Tarinaky>
At least, the one I saw.
17:04 Tarinaky [Tarinaky@Nightstar-28f7cb92.adsl.virginmedia.net] has quit [Connection closed]
17:16 Derakon[AFK] is now known as Derakon
17:21
< Alek>
http://notalwaysright.com/and-they-wonder-why-we-charge-by-the-hour/4517
17:56 Tarinaky [Tarinaky@Nightstar-28f7cb92.adsl.virginmedia.net] has joined #code
17:59 Tarinaky [Tarinaky@Nightstar-28f7cb92.adsl.virginmedia.net] has quit [Client closed the connection]
17:59 Tarinaky [Tarinaky@Nightstar-28f7cb92.adsl.virginmedia.net] has joined #code
18:33 Serah [Z@3A600C.A966FF.5BF32D.8E7ABA] has quit [Ping timeout: 121 seconds]
18:57
< gnolam>
ERROR: ERROR NOT UNDETECTED
19:00
< gnolam>
From http://kotaku.com/5484157/valves-portal-puzzle-so-far-the-files-recovered-from-a perture-science .
19:16 Orth [orthianz@Nightstar-a25515d3.xnet.co.nz] has quit [Client closed the connection]
19:31 Orthia [orthianz@Nightstar-a25515d3.xnet.co.nz] has joined #code
19:31 Orthia [orthianz@Nightstar-a25515d3.xnet.co.nz] has quit [Client closed the connection]
19:35 Serah [Z@26ECB6.A4B64C.298B52.D80DA0] has joined #code
20:33 Orthia [orthianz@Nightstar-76c77331.xnet.co.nz] has joined #code
20:37 MyCatVerbs [mycatverbs@Nightstar-58acb782.cable.virginmedia.com] has joined #code
20:37 mode/#code [+o MyCatVerbs] by Reiver
20:40 AbuDhabi [annodomini@Nightstar-303ffea1.adsl.tpnet.pl] has joined #code
20:42 AnnoDomini [annodomini@Nightstar-489a1c1a.adsl.tpnet.pl] has quit [Ping timeout: 121 seconds]
20:57 AbuDhabi [annodomini@Nightstar-303ffea1.adsl.tpnet.pl] has quit [Ping timeout: 121 seconds]
20:58 AnnoDomini [annodomini@Nightstar-303ffea1.adsl.tpnet.pl] has joined #code
20:58 mode/#code [+o AnnoDomini] by Reiver
21:18
< Bob_home>
JavaServer is made up of Cancer and Madness. >.<
21:22
<@McMartin>
And it still is the best-scaling technology in the space, AFAIK >.<
21:36
< Bob_home>
I can sum up it's pitfalls in 1 word: ResultSets
21:37
<@McMartin>
Hrm. Is that Java Server Pages or JDBC?
21:37 * McMartin is sadly no longer buzzword compliant!
21:37
< Bob_home>
hehe
21:37
<@McMartin>
As such, my previous >.< may be invalid
21:37
< Bob_home>
Ok, technically JDBC, I think.
21:38
< Bob_home>
But JavaServer sucks as well. No dynamic arrays.
21:38 * McMartin only ever did raw servlet coding.
21:38 * McMartin ... can't really recommend it.
21:38
<@McMartin>
But it's probably better than building an entire app out of nothing but JSPs.
21:39 * Bob_home nods
21:39
< Bob_home>
Which, according to the makers of the software for Project From Hell, JSP's are the only web scripting possible.
21:40
<@McMartin>
That's baffling =(
21:40 Vornicus-Latens is now known as Vornicus
21:40
<@McMartin>
I can't think of anything that allows JSPs that doesn't also accept arbitrary WARs.
21:41
<@McMartin>
(Though again my knowledge is severely dated)
21:41
<@McMartin>
Still, technological progress is supposed to go in the other direction.
21:42
< ToxicFrog>
WARs?
21:42 Derakon is now known as Derakon[AFK]
21:45
<@McMartin>
TF: Web ARchive. A structured JAR with metadata intended to be loaded by something like Tomcat which has a bunch of Java classes that do CGI, a bunch of JSPs to be compiled *into* Java classes that do CGI, supporting static HTML/images/etc, and some XML to specify the mapping between URLs sent to the server and which content to serve/class to invoke methods on.
21:45
<@McMartin>
In the ideal world, a dynamic web application is this one file that you throw where Tomcat can see it, and suddenly your blog software or whatever is installed.
21:47
< ToxicFrog>
Aah.
21:49
< gnolam>
But what is it good for? Absolutely nothing!
21:50
< Namegduf>
It's the idea of people running their little blogs on Java that make me want to get into hosting.
21:50
< Namegduf>
Because they're going to need to pay for that RAM.
21:51
<@McMartin>
Meanwhile, PHP is blazingly efficient
21:51
< Namegduf>
PHP sucks ass too.
21:51
<@McMartin>
PHP is, in almost every web application domain, the alternative.
21:51 * McMartin would have hope that a line like "meanwhile, PHP is blazingly efficient" would be obvious sarcasm.
21:52
< Namegduf>
I know.
21:52
< ToxicFrog>
Python!~
21:52
< Namegduf>
I hear Python is better.
21:52
<@McMartin>
TF: I honestly don't know how Python - or, more realistically, mod_python - scales compared to a tuned Java server.
21:52
<@McMartin>
Python's definitely better than PHP
21:52
<@McMartin>
For security reasons if nothing else
21:53 * ToxicFrog nods
21:53
< Namegduf>
PHP's "security issues" are entirely bad-programmer related nowadays.
21:53
< ToxicFrog>
I have to say that from a programmer's perspective, Django is pretty awesome
21:53
< ToxicFrog>
But I have no idea what the performance is like
21:53
<@McMartin>
So are C's, which is why you shouldn't use either for such things
21:53
< Namegduf>
No, you misunderstand.
21:53
< Namegduf>
PHP has had robust, "prepared statement" MySQL usage for years now.
21:53
< Namegduf>
The original problems were its fault, but it fixed them.
21:54
<@McMartin>
Yes, but web programmers are as a rule random people hired off the street.
21:54
< Namegduf>
The problem is that when so many of the programmers are of a similar grade to, say, VB programmers- yeah.
21:54
< Namegduf>
There's still a lot of bad tutorials out there.
21:54
<@McMartin>
This is why if you're going to hand them technology to build something for you, you want something a bit more failsafe
21:54
< Namegduf>
I'm not sure you get any more failsafe without removing SQL entirely.
21:54
<@McMartin>
I *suspect* one of the stricter frameworks like Rails or Django might win out.
21:54
< Namegduf>
Or outright denying any non-prepared-statements.
21:55 * ToxicFrog points at Django again
21:55
<@McMartin>
Rails, though, is only any good if you want to do what it's a framework for. It's not very flexible.
21:55
< Namegduf>
It's a pity that Ruby is possibly the worst performing language that people have tried to do web stuff with.
21:55
<@McMartin>
And if you're big and spread out enough that you *need* good programmers to do your custom web-based interface to a major chunk of business logic...
21:56
<@McMartin>
... then Java's the closest to an actual compiled language you get.
21:56
<@McMartin>
Which is really a roundabout way of saying "Python needs better JITs"
21:56
< Namegduf>
Java is probably good for the big scale stuff, but when it comes to web things, I think ignoring the number of small websites out there isn't going to work.
21:56
<@McMartin>
Well, no.
21:56
< Namegduf>
Depending on what you're doing, obviously.
21:57
<@McMartin>
But for the small stuff I think the choice is Rails/Django/That Perl Equivalent
21:57
< Namegduf>
Java doesn't really scale at all. It's just big and designed for big things.
21:57
< Namegduf>
It doesn't scale down.
21:57
< Namegduf>
Rails doesn't work for any size.
21:57
< Namegduf>
It eats buckets of RAM.
21:57
< Namegduf>
If you're running a blog off it, you're going to be paying a lot more.
21:57
<@McMartin>
Your definition of "work" continues to baffle me
21:57
< gnolam>
To quote a (when it comes to this subject at least) wise poster on a forum I hang out on: As PHP attracts the spaghetti hackers, Rails attracts the magical pattern freaks.
21:58
<@McMartin>
Neither PHP nor Rails are the best choice in most circumstances. But they're *a* choice and it's not like they aren't heavily used.
21:58
< Namegduf>
McMartin: My definition of "work" is "is a reasonably affordable choice" as well.
21:58
<@McMartin>
(That said, if you're running a blog, using anything that isn't WordPress basically means you fail)
21:58
< Namegduf>
PHP will run a lot more cheaply than Rails will, which is why people tend to prefer it.
21:59
< Namegduf>
They *both* suck.
21:59
<@McMartin>
WordPress is written in PHP, but it's also mature software at this point.
22:01 Netsplit *.net <-> *.split quits: @Attilla, Reiver, Vornicus, @AnnoDomini, PinkFreud, Taki^, Serah, @McMartin, Kazriko, jerith, (+5 more, use /NETSPLIT to show all of them)
22:01 Netsplit over, joins: AnnoDomini, MyCatVerbs, gnolam
22:01 Derakon[AFK] [Derakon@Nightstar-5abd3ac9.ca.comcast.net] has quit [Operation timed out]
22:01 Netsplit over, joins: Alek
22:01 Netsplit over, joins: Taki^, Serah
22:05 Kazriko [kaz@Nightstar-e09690fa.client.bresnan.net] has joined #code
22:09 PinkFreud [WhyNot@NetworkAdministrator.Nightstar.Net] has joined #code
22:09 Vornicus [vorn@ServerAdministrator.Nightstar.Net] has joined #code
22:09 Namegduf [namegduf@Nightstar-5c10d129.beshir.org] has joined #code
22:09 jerith [jerith@ServerAdministrator.Nightstar.Net] has joined #code
22:09 McMartin [mcmartin@Nightstar-6397d65b.pltn13.sbcglobal.net] has joined #code
22:09 Reiver [reaverta@ServerAdministrator.Nightstar.Net] has joined #code
22:09 Zed [Zed@Nightstar-d0088b95.or.comcast.net] has joined #code
22:09 Attilla [Attilla@FBC920.0A905B.55C6A3.AD1094] has joined #code
22:09 ServerMode/#code [+oqo Reiver Reiver Attilla] by *.Nightstar.Net
22:09 mode/#code [+o MyCatVerbs] by Reiver
22:09 mode/#code [+o AnnoDomini] by Reiver
22:09 mode/#code [+o ToxicFrog] by Reiver
22:09 mode/#code [+o Kazriko] by Reiver
22:09 mode/#code [+o Syloqs-AFH] by Reiver
22:09 mode/#code [+o TheWatcher] by Reiver
22:38 AnnoDomini [annodomini@Nightstar-303ffea1.adsl.tpnet.pl] has quit [[NS] Quit: Sleeeeeeep.]
--- Log closed Thu Mar 04 00:00:11 2010
code logs -> 2010 -> Wed, 03 Mar 2010< code.20100302.log - code.20100304.log >