<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Last Stop &#187; Technical Nonsense</title>
	<atom:link href="http://laststop.spaceislimited.org/category/technical-nonsense/feed/" rel="self" type="application/rss+xml" />
	<link>http://laststop.spaceislimited.org</link>
	<description>it&#039;s going to be a long ride</description>
	<lastBuildDate>Wed, 28 Jan 2009 13:21:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Programming Pong in C and OpenGL &#8211; Part VI</title>
		<link>http://laststop.spaceislimited.org/2009/01/19/programming-pong-in-c-and-opengl-part-vi/</link>
		<comments>http://laststop.spaceislimited.org/2009/01/19/programming-pong-in-c-and-opengl-part-vi/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 13:32:23 +0000</pubDate>
		<dc:creator>Timothy M. Rodriguez</dc:creator>
				<category><![CDATA[Technical Nonsense]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[glut]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[mac os x]]></category>
		<category><![CDATA[opengl]]></category>
		<category><![CDATA[pong]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://laststop.spaceislimited.org/?p=57</guid>
		<description><![CDATA[Here&#8217;s the last part of my multi-part series on programming your very own pong clone in c and opengl!  It&#8217;s been a long time coming, so I hope you enjoy.  There&#8217;s lots of improvements in this version including a completely custom old-style &#8220;LED Alarm Clock&#8221; scoreboard, flashes on bounce, funky changing colors, improved collision detection, [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_61" class="wp-caption aligncenter" style="width: 409px"><a href="http://laststop.spaceislimited.org/wp-content/uploads/2009/01/timgl_05.png"><img class="size-full" title="Awesome Flashy Pong!" src="http://laststop.spaceislimited.org/wp-content/uploads/2009/01/timgl_05.png" alt="The latest version of my sample clone with scoreboard, etc." width="399" height="414" /></a><p class="wp-caption-text">The latest version of my sample clone!</p></div>
<p>Here&#8217;s the last part of my multi-part series on programming your very own pong clone in c and opengl!  It&#8217;s been a long time coming, so I hope you enjoy.  There&#8217;s lots of improvements in this version including a completely custom old-style &#8220;LED Alarm Clock&#8221; scoreboard, flashes on bounce, funky changing colors, improved collision detection, and a round ball! <img src='http://laststop.spaceislimited.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><span id="more-57"></span></p>
<p>Here&#8217;s the code!</p>
<pre class="brush: c">

#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;

#include &lt;OpenAL/al.h&gt;
#include &lt;GLUT/glut.h&gt;

#define PADDLE_MOVE_SPEED 350
#define CLEAR_COLOR_DECAY 2.0
#define BALL_RADIUS 10
#define BALL_FACETS 60
#define START_SPEED 200

int lastFrameTime = 0, windowWidth = 0, windowHeight = 0, now = 0;
float midWidth = 0, midHeight = 0;
float elapsedTime = 0, elapsedMilliSeconds = 0;
char player1Move = 0, player2Move = 0;
float player1V = 0, player2V = 0;

float PI = 3.14159265358979323846264;

//scores
int player1Score = 0, player2Score = 0;

//the following variables calculate a random starting projectile trajectory
float randomDirection;
long longMax = 0x7fffffff;	//max of longs 2^31-1 (2^(n-1)-1 for 2&#039;s complement) float trajectory[2] = {0, 0};

float projMove[2] = {0, 0};
double trajectory[2] = {0, 0};
short moveSpeed = START_SPEED;

//glitz and glamour
float player1ColorDirection[3];
float player2ColorDirection[3];
float player1Color[3];
float player2Color[3];
float colorMoveSpeed = 2.0;
double vectorLength1 = 0;
double vectorLength2 = 0;

float ballColorDirection[3];
float ballColor[3];
double ballVectorLength = 0;

//background explosion color
float clearColor[3];

int i = 0;

//scoreboard
char player1Num1[7] = {1, 1, 1, 0, 1, 1, 1};	//digital display set to zero, (each segment is enabled or disabled)
char player1Num2[7] = {1, 1, 1, 0, 1, 1, 1};
char player2Num1[7] = {1, 1, 1, 0, 1, 1, 1};	//digital display set to zero, (each segment is enabled or disabled)
char player2Num2[7] = {1, 1, 1, 0, 1, 1, 1};

//digit representations
char digit0[7] = {1, 1, 1, 0, 1, 1, 1};
char digit1[7] = {0, 0, 1, 0, 0, 0, 1};
char digit2[7] = {0, 1, 1, 1, 1, 1, 0};
char digit3[7] = {0, 1, 1, 1, 0, 1, 1};
char digit4[7] = {1, 0, 1, 1, 0, 0, 1};
char digit5[7] = {1, 1, 0, 1, 0, 1, 1};
char digit6[7] = {1, 1, 0, 1, 1, 1, 1};
char digit7[7] = {0, 1, 1, 0, 0, 0, 1};
char digit8[7] = {1, 1, 1, 1, 1, 1, 1};
char digit9[7] = {1, 1, 1, 1, 0, 1, 1};

void setSpaceEffect(void) {
for (i=0; i &lt; 3; i++) {
player1ColorDirection[i] = (float) random() / (float) 0x7fffffff; //random vector
player2ColorDirection[i] = (float) random() / (float) 0x7fffffff;
ballColorDirection[i] = (float) random() / (float) 0x7fffffff;
}
//figure out vector lenngth
for (i=0; i &lt; 3; i++) {
vectorLength1 += player1ColorDirection[i] * player1ColorDirection[i];
vectorLength2 += player2ColorDirection[i] * player2ColorDirection[i];
ballVectorLength += ballColorDirection[i] * ballColorDirection[i];
}
sqrt(vectorLength1);
sqrt(vectorLength2);
sqrt(ballVectorLength);
//normalize vector
for (i=0; i &lt; 3; i++) {
player1ColorDirection[i] /= vectorLength1;
player2ColorDirection[i] /= vectorLength2;
ballColorDirection[i] /= ballVectorLength;
}
}

void calculateColor(float color[3], float colorDirection[3]) {
//caculate the next color based on the direction and elapsed time values
for (i=0; i &lt; 3; i++) {
color[i] += colorDirection[i] * colorMoveSpeed * elapsedTime;
if (color[i] &gt; 1) {
color[i] = 1;
colorDirection[i] *= -1;
}
else if (color[i] &lt; 0) {
color[i] = 0;
colorDirection[i] *= -1;
}
}
}

void calculateClearColor(float color[3]) {
for (i=0; i &lt; 3; i++) {
color[i] -= CLEAR_COLOR_DECAY * elapsedTime;
if(color[i] &lt; 0)
color[i] = 0;
}
}

void setClearColor(float color[3]) {
for (i=0; i &lt; 3; i++) {
color[i] = 1.0;
}
}

void resetProjectile(void) {
//set starting random trajectory
randomDirection = 2 * PI * (float) random() / (float) 0x7fffffff;
trajectory[0] = (float) cos(randomDirection);
trajectory[1] = (float) sin(randomDirection);
projMove[0] = midWidth;
projMove[1] = midHeight;
}

/*draw a digital (a la clock style) digit some place specified by x and y
*the enabled array is which segments of the display are enabled (counted starting from top left in a snake/8 fasion)
*
* 1 -
* 0| |2
* 3 -
* 4| |6
* 5 -
*/
void drawDigit(char enabled[7], float x, float y) {
glPushMatrix();
glTranslatef(x, y, 0);	//position digit to be drawn
//draw digital number (a la digital clock) segment by segment
glColor3f(1.0, 1.0, 1.0);
//draw segment 5
if(enabled[5]) {
glBegin(GL_QUADS);
glVertex2f(0,0);
glVertex2f(10,0);
glVertex2f(10,2);
glVertex2f(0,2);
glEnd();
}

//draw segment 3
if(enabled[3]) {
glBegin(GL_QUADS);
glVertex2f(0,9);
glVertex2f(10,9);
glVertex2f(10,11);
glVertex2f(0,11);
glEnd();
}

//draw segment 1
if(enabled[1]) {
glBegin(GL_QUADS);
glVertex2f(0,18);
glVertex2f(10,18);
glVertex2f(10,20);
glVertex2f(0,20);
glEnd();
}

//draw segment 4
if(enabled[4]) {
glBegin(GL_QUADS);
glVertex2f(0,2);
glVertex2f(2,2);
glVertex2f(2,9);
glVertex2f(0,9);
glEnd();
}

//draw segment 0
if(enabled[0]) {
glBegin(GL_QUADS);
glVertex2f(0,11);
glVertex2f(2,11);
glVertex2f(2,20);
glVertex2f(0,20);
glEnd();
}

//draw segment 6
if(enabled[6]) {
glBegin(GL_QUADS);
glVertex2f(8,2);
glVertex2f(10,2);
glVertex2f(10,9);
glVertex2f(8,9);
glEnd();
}

//draw segment 2
if(enabled[2]) {
glBegin(GL_QUADS);
glVertex2f(8,11);
glVertex2f(10,11);
glVertex2f(10,20);
glVertex2f(8,20);
glEnd();
}

glPopMatrix();
}

void setDigitEnablePattern(char enabled[7], char digit) {

switch(digit) {
case 0:
for(i=0; i&lt;7; i++) {
enabled[i] = digit0[i];
}
break;
case 1:
for(i=0; i&lt;7; i++) {
enabled[i] = digit1[i];
}
break;
case 2:
for(i=0; i&lt;7; i++) {
enabled[i] = digit2[i];
}
break;
case 3:
for(i=0; i&lt;7; i++) {
enabled[i] = digit3[i];
}
break;
case 4:
for(i=0; i&lt;7; i++) {
enabled[i] = digit4[i];
}
break;
case 5:
for(i=0; i&lt;7; i++) {
enabled[i] = digit5[i];
}
break;
case 6:
for(i=0; i&lt;7; i++) {
enabled[i] = digit6[i];
}
break;
case 7:
for(i=0; i&lt;7; i++) {
enabled[i] = digit7[i];
}
break;
case 8:
for(i=0; i&lt;7; i++) {
enabled[i] = digit8[i];
}
break;
case 9:
for(i=0; i&lt;7; i++) {
enabled[i] = digit9[i];
}
break;
}
}

void drawScore(char player1, char player2) {

if(player1 &lt; 10) {
setDigitEnablePattern(player1Num1, 0);
setDigitEnablePattern(player1Num2, player1);
}
else if (player1 &lt; 100) {
setDigitEnablePattern(player1Num1, player1 / 10);
setDigitEnablePattern(player1Num2, player1 - ((player1/10) * 10));
}
else {	//max out at 99
setDigitEnablePattern(player1Num1, 9);
setDigitEnablePattern(player1Num2, 9);
}

if(player2 &lt; 10) {
setDigitEnablePattern(player2Num1, 0);
setDigitEnablePattern(player2Num2, player2);
}
else if (player2 &lt; 100) {
setDigitEnablePattern(player2Num1, player2 / 10);
setDigitEnablePattern(player2Num2, player2 - ((player2/10) * 10));
}
else {	//max out at 99
setDigitEnablePattern(player2Num1, 9);
setDigitEnablePattern(player2Num2, 9);
}

drawDigit(player1Num1, (windowWidth/4)-15, 20);
drawDigit(player1Num2, (windowWidth/4)+5, 20);
drawDigit(player2Num1, ((windowWidth/4)*3)-15, 20);
drawDigit(player2Num2, ((windowWidth/4)*3)+5, 20);

}

void display(void)
{
//get window parameters
windowWidth = glutGet(GLUT_WINDOW_WIDTH);
windowHeight = glutGet(GLUT_WINDOW_HEIGHT);

midWidth = windowWidth/2;
midHeight = windowHeight/2;

//start timing code
if (lastFrameTime == 0) {
lastFrameTime = glutGet(GLUT_ELAPSED_TIME);
resetProjectile();	//since this is the fist time, this is actually a set <img src='http://laststop.spaceislimited.org/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />
player1V = midHeight;
player2V = midHeight;
//initialize the space effect colors
setSpaceEffect();
glClearColor(0.0, 0.0, 0.0, 0.0);	//set clear color to black
}

now = glutGet(GLUT_ELAPSED_TIME);
elapsedMilliSeconds = now - lastFrameTime;
elapsedTime = elapsedMilliSeconds/1000.0f;
lastFrameTime = now;

calculateClearColor(clearColor);
glClearColor(clearColor[0], clearColor[1], clearColor[2], 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glShadeModel(GL_FLAT);

//draw score
drawScore(player1Score, player2Score);

//calculate move distances
switch (player1Move) {
case 1:		//move up
player1V += PADDLE_MOVE_SPEED * elapsedTime;
break;
case -1:	//move up
player1V -= PADDLE_MOVE_SPEED * elapsedTime;
break;
default:	//do nothing
break;
}
//check out of bounds
if (player1V &gt; windowHeight-50) {
//bounce back
player1Move = -1;
}
if (player1V &lt; 0+50) {
//bounce back other way
player1Move = 1;
}

switch (player2Move) {
case 1:		//move up
player2V += PADDLE_MOVE_SPEED * elapsedTime;
break;
case -1:	//move up
player2V -= PADDLE_MOVE_SPEED * elapsedTime;
break;
default:	//do nothing
break;
}
//check out of bounds
if (player2V &gt; windowHeight-50) {
//bounce back
player2Move = -1;
}
if (player2V &lt; 0+50) {
//bounce back other way
player2Move = 1;
}

//create and position player 1
glPushMatrix();

calculateColor(player1Color, player1ColorDirection);
glColor3f(player1Color[0], player1Color[1], player1Color[2]);	//player 1 color

glTranslatef(30.0f, player1V, 0.0f);

glBegin(GL_QUADS);
glVertex2f(-10, -50);
glVertex2f(-10, 50);
glVertex2f(10, 50);
glVertex2f(10, -50);
glEnd();

glPopMatrix();

//create and position player 2
glPushMatrix();

calculateColor(player2Color, player2ColorDirection);
glColor3f(player2Color[0], player2Color[1], player2Color[2]);	//player 2 color

glTranslatef(windowWidth-30, player2V, 0.0f);

glBegin(GL_QUADS);
glVertex2f(-10, -50);
glVertex2f(-10, 50);
glVertex2f(10, 50);
glVertex2f(10, -50);
glEnd();

glPopMatrix();

/***************************************
*	Projectile CODE!!!
*
***************************************/

//calculate move distances
projMove[0] += moveSpeed * trajectory[0] * elapsedTime;
projMove[1] += moveSpeed * trajectory[1] * elapsedTime;

//create and move projectile
glPushMatrix();

calculateColor(ballColor, ballColorDirection);
glColor3f(ballColor[0], ballColor[1], ballColor[2]);	//player 1 color

glTranslatef(projMove[0], projMove[1], 0.0f);

glBegin(GL_TRIANGLE_FAN);
for(i=0; i &lt; 360; i += 360 / BALL_FACETS) {
glVertex2f(sin(i * PI / 180) * BALL_RADIUS, cos(i * PI / 180) * BALL_RADIUS);
}
glEnd();

glPopMatrix();

//set bounds for projectile
if (projMove[0] &gt; (windowWidth)) {	//player 1 scored - out of bounds right
player1Score++;
moveSpeed = START_SPEED;
printf(&quot;Player 1 Scored!  Score: %f &quot;, player1Score);
resetProjectile();
}

else if (projMove[0] &lt; (0)) {		//player 2 scored - out of bounds left
player2Score++;
moveSpeed = START_SPEED;
resetProjectile();
}

else if (projMove[1] &gt; (windowHeight-10)) {	//out of bounds top
trajectory[1] *= -1;
projMove[1] -= 0.5;
}

else if (projMove[1] &lt; (10)) {	//out of bounds bottom
trajectory[1] *= -1;
projMove[1] += 0.5;
}

//collision detection code
else if (projMove[0] &lt; 50 &amp;amp;amp;amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp;amp;amp;amp; projMove[0] &gt; 49) {		//intersecting with line of left paddle
if (projMove[1] &lt;= player1V + 50 &amp;amp;amp;amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp;amp;amp;amp; projMove[1] &gt;= player1V-50) {
trajectory[0] *= -1;
moveSpeed += 30;
setClearColor(clearColor);
projMove[0] += 0.5;
}
}

else if (projMove[0] &gt; windowWidth-50 &amp;amp;amp;amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp;amp;amp;amp; projMove[0] &lt; windowWidth-49) {		//intersecting with line of right paddle
if (projMove[1] &lt;= player2V + 50 &amp;amp;amp;amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp;amp;amp;amp; projMove[1] &gt;= player2V-50) {
trajectory[0] *= -1;
moveSpeed += 30;
setClearColor(clearColor);
projMove[0] -= 0.5;
}
}

/******************************
*  END PROJECTILE CODE
*
******************************/

glutSwapBuffers();

}

void reshape(int width, int height)
{
glViewport(0, 0, width, height);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, width, 0, height);
glMatrixMode(GL_MODELVIEW);
}

void idle(void)
{
glutPostRedisplay();
}

void keyboard(unsigned char key, int x, int y) {
switch (key) {
case &#039;w&#039;:
//do something
player1Move=1;
glutPostRedisplay();
break;
case &#039;s&#039;:
//do something
player1Move=-1;
glutPostRedisplay();
break;
case &#039;o&#039;:
//do something
player2Move=1;
glutPostRedisplay();
break;
case &#039;l&#039;:
//do something
player2Move=-1;
glutPostRedisplay();
break;
default:
//some other key
break;
}

}

void keyboardup(unsigned char key, int x, int y) {
switch (key) {
case &#039;w&#039;:
//do something
player1Move=0;
glutPostRedisplay();
break;
case &#039;s&#039;:
player1Move=0;
glutPostRedisplay();
break;
case &#039;o&#039;:
player2Move=0;
glutPostRedisplay();
break;
case &#039;l&#039;:
player2Move=0;
glutPostRedisplay();
break;
default:
//some other key
break;
}

}

int main(int argc, char** argv)
{
glutInit(&amp;amp;amp;amp;amp;amp;amp;amp;argc, argv);

glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(500, 500);

glutCreateWindow(&quot;Tim GL&quot;);

glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutKeyboardUpFunc(keyboardup);
glutIdleFunc(idle);

glutMainLoop();
return EXIT_SUCCESS;
}
</pre>
<p>I delayed so long because I wanted to refactor this code to better separate components and functions, but I didn&#8217;t get the time to do so.  (That&#8217;s why I should do it that way from the start!)  You can get a direct copy of the binary <a title="TimGL 0.5!" href="/downloads/TimGL_0.5.zip">here</a>.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this Post!</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Flaststop.spaceislimited.org%2F2009%2F01%2F19%2Fprogramming-pong-in-c-and-opengl-part-vi%2F&amp;title=Programming%20Pong%20in%20C%20and%20OpenGL%20-%20Part%20VI&amp;bodytext=%0D%0A%0D%0AHere%27s%20the%20last%20part%20of%20my%20multi-part%20series%20on%20programming%20your%20very%20own%20pong%20clone%20in%20c%20and%20opengl%21%20%C2%A0It%27s%20been%20a%20long%20time%20coming%2C%20so%20I%20hope%20you%20enjoy.%20%C2%A0There%27s%20lots%20of%20improvements%20in%20this%20version%20including%20a%20completely%20custom%20old-style%20%22LED" title="Digg"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2009%2F01%2F19%2Fprogramming-pong-in-c-and-opengl-part-vi%2F&amp;title=Programming%20Pong%20in%20C%20and%20OpenGL%20-%20Part%20VI" title="Reddit"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2009%2F01%2F19%2Fprogramming-pong-in-c-and-opengl-part-vi%2F&amp;title=Programming%20Pong%20in%20C%20and%20OpenGL%20-%20Part%20VI&amp;notes=%0D%0A%0D%0AHere%27s%20the%20last%20part%20of%20my%20multi-part%20series%20on%20programming%20your%20very%20own%20pong%20clone%20in%20c%20and%20opengl%21%20%C2%A0It%27s%20been%20a%20long%20time%20coming%2C%20so%20I%20hope%20you%20enjoy.%20%C2%A0There%27s%20lots%20of%20improvements%20in%20this%20version%20including%20a%20completely%20custom%20old-style%20%22LED" title="del.icio.us"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Flaststop.spaceislimited.org%2F2009%2F01%2F19%2Fprogramming-pong-in-c-and-opengl-part-vi%2F&amp;t=Programming%20Pong%20in%20C%20and%20OpenGL%20-%20Part%20VI" title="Facebook"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Flaststop.spaceislimited.org%2F2009%2F01%2F19%2Fprogramming-pong-in-c-and-opengl-part-vi%2F" title="Technorati"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.propeller.com/submit/?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2009%2F01%2F19%2Fprogramming-pong-in-c-and-opengl-part-vi%2F" title="Propeller"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/propeller.png" title="Propeller" alt="Propeller" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.newsvine.com/_tools/seed&amp;save?u=http%3A%2F%2Flaststop.spaceislimited.org%2F2009%2F01%2F19%2Fprogramming-pong-in-c-and-opengl-part-vi%2F&amp;h=Programming%20Pong%20in%20C%20and%20OpenGL%20-%20Part%20VI" title="NewsVine"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/newsvine.png" title="NewsVine" alt="NewsVine" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Flaststop.spaceislimited.org%2F2009%2F01%2F19%2Fprogramming-pong-in-c-and-opengl-part-vi%2F&amp;title=Programming%20Pong%20in%20C%20and%20OpenGL%20-%20Part%20VI&amp;annotation=%0D%0A%0D%0AHere%27s%20the%20last%20part%20of%20my%20multi-part%20series%20on%20programming%20your%20very%20own%20pong%20clone%20in%20c%20and%20opengl%21%20%C2%A0It%27s%20been%20a%20long%20time%20coming%2C%20so%20I%20hope%20you%20enjoy.%20%C2%A0There%27s%20lots%20of%20improvements%20in%20this%20version%20including%20a%20completely%20custom%20old-style%20%22LED" title="Google Bookmarks"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2009%2F01%2F19%2Fprogramming-pong-in-c-and-opengl-part-vi%2F&amp;title=Programming%20Pong%20in%20C%20and%20OpenGL%20-%20Part%20VI" title="StumbleUpon"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="" title="Ma.gnolia"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/" title="Ma.gnolia" alt="Ma.gnolia" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="" title="YahooMyWeb"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/" title="YahooMyWeb" alt="YahooMyWeb" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.netvouz.com/action/submitBookmark?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2009%2F01%2F19%2Fprogramming-pong-in-c-and-opengl-part-vi%2F&amp;title=Programming%20Pong%20in%20C%20and%20OpenGL%20-%20Part%20VI&amp;popup=no" title="Netvouz"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/netvouz.png" title="Netvouz" alt="Netvouz" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http%3A%2F%2Flaststop.spaceislimited.org%2F2009%2F01%2F19%2Fprogramming-pong-in-c-and-opengl-part-vi%2F&amp;title=Programming%20Pong%20in%20C%20and%20OpenGL%20-%20Part%20VI" title="blogmarks"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/blogmarks.png" title="blogmarks" alt="blogmarks" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://laststop.spaceislimited.org/2009/01/19/programming-pong-in-c-and-opengl-part-vi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Connecting to MS SQL Server from Java Recipe</title>
		<link>http://laststop.spaceislimited.org/2008/11/28/connecting-to-ms-sql-server-from-java-recipe/</link>
		<comments>http://laststop.spaceislimited.org/2008/11/28/connecting-to-ms-sql-server-from-java-recipe/#comments</comments>
		<pubDate>Sat, 29 Nov 2008 01:26:43 +0000</pubDate>
		<dc:creator>Timothy M. Rodriguez</dc:creator>
				<category><![CDATA[Technical Nonsense]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[connect]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[ms sql server]]></category>
		<category><![CDATA[recipe]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[sql server]]></category>

		<guid isPermaLink="false">http://laststop.spaceislimited.org/?p=44</guid>
		<description><![CDATA[I thought I&#8217;d provide a recipe for how to connect to SQL Server from Java.  The following is a quick, relatively clean way to connect to Microsoft&#8217;s SQL Server from Java without going through too much voodoo&#8211;as is often the case when trying to connect to MS SQL Server through a non-microsoft language.  Luckily, Microsoft [...]]]></description>
			<content:encoded><![CDATA[<p>I thought I&#8217;d provide a recipe for how to connect to SQL Server from Java.  The following is a quick, relatively clean way to connect to Microsoft&#8217;s SQL Server from Java without going through too much voodoo&#8211;as is often the case when trying to connect to MS SQL Server through a non-microsoft language.  Luckily, Microsoft provides a pure Java JDBC driver for connecting to it&#8217;s server!  You can find it <a title="MS SQL JDBC 2005" href="http://msdn.microsoft.com/en-us/data/aa937724.aspx" target="_blank">here</a>.  Don&#8217;t forget to properly include in your Java project!  Also, even though it&#8217;s the MS SQL 2k3 driver, it works perfectly fine with MS SQL 2000 (so you might as well just use this driver).</p>
<p><span id="more-44"></span></p>
<pre class="brush: java">

/*
* Main.java
*
* Created on November 27, 2008, 3:56 PM
*
*/

package sqlserversample;

import java.sql.*;
import com.microsoft.sqlserver.jdbc.*;

/**
*
* @author Timothy M. Rodriguez
*/

public class Main {

/* jdbc driver name and database url
* ms sql uses port 1433
* replace &quot;mysqlserver&quot; with the ip and host of your database
* if connecting from a *nix box, don&#039;t forget to use the FQDN and not just the NetBIOS host
* if not, the ip is a safe bet
*/
private static final String DATABASE_URL = &quot;jdbc:sqlserver://mysqlserver:1433&quot;;
private static final String DRIVER = &quot;com.microsoft.sqlserver.jdbc.sqlserverdriver&quot;;

//used to connect to the database
private static Connection connection = null;
//used to execute queries on the database
private static Statement statement = null;
//this object is used to store your result sets
private static ResultSet resultSet = null;
//this object is used to stored data about the table
private static ResultSetMetaData metaData = null;

/** Creates a new instance of Main */
public Main() {
//default constructor
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {

try {
// load the driver class

//this should work, but doesn&#039;t, not sure why, let me know in the comments if you do
// Class.forName(DRIVER);
// instead i created it this way
SQLServerDriver sqlServerDriver = new SQLServerDriver();
/*
* I manually created a SQLServerDriver instance, this is due to
* complications with the classpath establish connection to db
*/
DriverManager.registerDriver(sqlServerDriver);
connection = DriverManager.getConnection(DATABASE_URL,
&quot;user&quot;, &quot;password&quot;);

// create the statement for querying
statement = connection.createStatement();

//put your query string in the executeQuery method argument
resultSet = statement.executeQuery(&quot;SELECT TOP 10 * FROM Table&quot;);
metaData = resultSet.getMetaData();
//I didn&#039;t use the metadata object, but showed you how to create it
//the metaData object can be used to get column names and indices, column types, etc.

while(resultSet.next()) {
//the get object method is useful if you don&#039;t want to bother with the column type
System.out.println(resultSet.getObject(3).toString());
}

} catch (SQLException sqlException) {
//couldn&#039;t connect to the db or execute a query
sqlException.printStackTrace();
/* in a real webapp, you don&#039;t want to be printing stack traces
* instead print a nice error page that doesn&#039;t include internal information
*  For example, &quot;oops, it blew up&quot;
*/
}
}
}
</pre>
<p>That&#8217;s it, I hope that helps!</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this Post!</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F11%2F28%2Fconnecting-to-ms-sql-server-from-java-recipe%2F&amp;title=Connecting%20to%20MS%20SQL%20Server%20from%20Java%20Recipe&amp;bodytext=I%20thought%20I%27d%20provide%20a%20recipe%20for%20how%20to%20connect%20to%20SQL%20Server%20from%20Java.%C2%A0%20The%20following%20is%20a%20quick%2C%20relatively%20clean%20way%20to%20connect%20to%20Microsoft%27s%20SQL%20Server%20from%20Java%20without%20going%20through%20too%20much%20voodoo--as%20is%20often%20the%20case%20when%20trying%20to%20conn" title="Digg"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F11%2F28%2Fconnecting-to-ms-sql-server-from-java-recipe%2F&amp;title=Connecting%20to%20MS%20SQL%20Server%20from%20Java%20Recipe" title="Reddit"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F11%2F28%2Fconnecting-to-ms-sql-server-from-java-recipe%2F&amp;title=Connecting%20to%20MS%20SQL%20Server%20from%20Java%20Recipe&amp;notes=I%20thought%20I%27d%20provide%20a%20recipe%20for%20how%20to%20connect%20to%20SQL%20Server%20from%20Java.%C2%A0%20The%20following%20is%20a%20quick%2C%20relatively%20clean%20way%20to%20connect%20to%20Microsoft%27s%20SQL%20Server%20from%20Java%20without%20going%20through%20too%20much%20voodoo--as%20is%20often%20the%20case%20when%20trying%20to%20conn" title="del.icio.us"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F11%2F28%2Fconnecting-to-ms-sql-server-from-java-recipe%2F&amp;t=Connecting%20to%20MS%20SQL%20Server%20from%20Java%20Recipe" title="Facebook"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F11%2F28%2Fconnecting-to-ms-sql-server-from-java-recipe%2F" title="Technorati"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.propeller.com/submit/?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F11%2F28%2Fconnecting-to-ms-sql-server-from-java-recipe%2F" title="Propeller"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/propeller.png" title="Propeller" alt="Propeller" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.newsvine.com/_tools/seed&amp;save?u=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F11%2F28%2Fconnecting-to-ms-sql-server-from-java-recipe%2F&amp;h=Connecting%20to%20MS%20SQL%20Server%20from%20Java%20Recipe" title="NewsVine"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/newsvine.png" title="NewsVine" alt="NewsVine" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F11%2F28%2Fconnecting-to-ms-sql-server-from-java-recipe%2F&amp;title=Connecting%20to%20MS%20SQL%20Server%20from%20Java%20Recipe&amp;annotation=I%20thought%20I%27d%20provide%20a%20recipe%20for%20how%20to%20connect%20to%20SQL%20Server%20from%20Java.%C2%A0%20The%20following%20is%20a%20quick%2C%20relatively%20clean%20way%20to%20connect%20to%20Microsoft%27s%20SQL%20Server%20from%20Java%20without%20going%20through%20too%20much%20voodoo--as%20is%20often%20the%20case%20when%20trying%20to%20conn" title="Google Bookmarks"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F11%2F28%2Fconnecting-to-ms-sql-server-from-java-recipe%2F&amp;title=Connecting%20to%20MS%20SQL%20Server%20from%20Java%20Recipe" title="StumbleUpon"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="" title="Ma.gnolia"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/" title="Ma.gnolia" alt="Ma.gnolia" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="" title="YahooMyWeb"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/" title="YahooMyWeb" alt="YahooMyWeb" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.netvouz.com/action/submitBookmark?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F11%2F28%2Fconnecting-to-ms-sql-server-from-java-recipe%2F&amp;title=Connecting%20to%20MS%20SQL%20Server%20from%20Java%20Recipe&amp;popup=no" title="Netvouz"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/netvouz.png" title="Netvouz" alt="Netvouz" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F11%2F28%2Fconnecting-to-ms-sql-server-from-java-recipe%2F&amp;title=Connecting%20to%20MS%20SQL%20Server%20from%20Java%20Recipe" title="blogmarks"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/blogmarks.png" title="blogmarks" alt="blogmarks" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://laststop.spaceislimited.org/2008/11/28/connecting-to-ms-sql-server-from-java-recipe/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A New Way To Surf &#8211; LP</title>
		<link>http://laststop.spaceislimited.org/2008/10/12/a-new-way-to-surf-lp/</link>
		<comments>http://laststop.spaceislimited.org/2008/10/12/a-new-way-to-surf-lp/#comments</comments>
		<pubDate>Sun, 12 Oct 2008 19:09:42 +0000</pubDate>
		<dc:creator>Timothy M. Rodriguez</dc:creator>
				<category><![CDATA[LPlayer]]></category>
		<category><![CDATA[Technical Nonsense]]></category>
		<category><![CDATA[LP]]></category>
		<category><![CDATA[lpxml]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[standard]]></category>
		<category><![CDATA[tv]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://laststop.spaceislimited.org/?p=8</guid>
		<description><![CDATA[Everyone&#8217;s talking about IP TV and how it&#8217;s going to revolutionize things. We&#8217;ll be able to get our TV anywhere, any way, but the reality has fallen short of the promise. Your ISP may be beaming Digital channels down to you over IP, but the experience is largely unique to your ISP. Your cable box [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://laststop.spaceislimited.org/wp-content/uploads/2008/10/video-tv.png"><img class="size-full wp-image-32 aligncenter" title="Old School TV" src="http://laststop.spaceislimited.org/wp-content/uploads/2008/10/video-tv.png" alt="Gotta love it!" width="314" height="346" /></a></p>
<p>Everyone&#8217;s talking about IP TV and how it&#8217;s going to revolutionize things.  We&#8217;ll be able to get our TV anywhere, any way, but the reality has fallen short of the promise.   Your ISP may be beaming Digital channels down to you over IP, but the experience is largely unique to your ISP.  <strong>Your cable box is not a TV Content browser</strong>, no matter how much it tries to be.  Heck, you can&#8217;t even take your Time Warner Cable box and easily connect it to a Comcast user&#8217;s home.  The <em>spirit</em> of the IP in <em>IP</em>TV is sorely missing.</p>
<p>That&#8217;s why I&#8217;m working on a better way&#8211;and I need your help.</p>
<p>There are several standards regarding IPTV (and they are used), but while they focus on <em>delivering</em> the content, they do not focus on the <em>programming</em>.  If you&#8217;re looking at the web to solve your problem, don&#8217;t look there either.  Every single news or content producer has their own site with their own way of accessing it.  You need accounts, you need a pretty hefty browser, and you need to wade through a different interface each and every time.</p>
<h3>There is no way to channel surf on the web.</h3>
<h2><span id="more-8"></span></h2>
<h2>What about RSS?</h2>
<p>RSS is great!  I love it, but it drastically changes consumption of media, albeit in a very Web way.  TiVO&#8217;s and DVR&#8217;s help bridge this gap on the classic TV side, but what about programming?  Sometimes I don&#8217;t want to pick what to watch.  Sometimes I just want to flip through channels and see what&#8217;s on.  RSS does not replace programming.  (I&#8217;d also like to take this moment to give a big shout-out to <a title="Miro" href="http://www.miro.com" target="_blank">Miro</a>, which is an amazing application for automagically downloading and managing video RSS feeds.) We need something more.</p>
<h2>A New Way to <em>Surf</em></h2>
<p>What we need is a format for serving up programming that goes beyond a fixed stream.  We need a way of mixing up content, and the web.  We also need a better way of consuming it all.  Without giving it an official name, I&#8217;m going to call this protocol LP.  Imagine if you could pull down a link to your favorite channel&#8217;s programming and view content live.  It&#8217;s not a stream, it&#8217;s a url your LP player goes to and it contains all the information you need to find out what&#8217;s playing now on your favorite channel.  Heck, why stop with now?  Maybe it&#8217;s all pre-recorded and you can skip to what&#8217;s playing later?  Maybe, you want to see what was on before?  Who needs a DVR?  The content should stay available and you should be able to consume it.  What I&#8217;m talking about is a REST API for navigating video and audio content.</p>
<h3><strong>A Trudge Through the Mud</strong></h3>
<p><span style="text-decoration: line-through;">I first started writing this post four months ago and I kept putting it off.</span> Then I wrote some more and put it off a few more months.  I had all these ideas in my head and I wanted to get them all out in one go.  I wanted to have a working prototype of an LP Server and Player, of the &#8220;LPXML&#8221; format, and have all the whizz-bang features I wanted to put into it.  The fact of the matter is I&#8217;m busy and it will take me forever to settle my ideas if I don&#8217;t just start and get something out there.  So I&#8217;m going to start with just the basics of what I think this &#8220;informal&#8221; standard should look like.</p>
<p>And I&#8217;m definitely looking for feedback.</p>
<p>What I&#8217;m proposing is that an LP player take a link to a website (e.g. www.spaceislimited.org/lplayer/) and this will be the root of the lplayer REST interface for my site (the link is hypothetical btw).  The Lplayer application (this could even be Miro if this catches on) would then know the following structure for the REST inteface.</p>
<p>lplayer/now/ &#8211; This verb will respond with a page that will contain the URL of the content that is currently now playing.  For example, the Lplayer goes to lplayer/now/ and get this response:</p>
<p>&lt;code&gt;</p>
<p>&lt;a href=&#8221;http://spaceislimited.org/videos/awesomevid1.lpxml&#8221; /&gt;</p>
<p>That&#8217;s it.  Nothing else.  Maybe eventually we&#8217;ll specify an XML doctype and wrap it in something like:</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?&gt;</p>
<p>&lt;lp version=&#8221;0.1&#8243; xmlns:lpxml=&#8221;http://www.lpxml.org/lpxml.dtd&#8221;&gt;</p>
<p>&lt;program&gt;http://spaceislimited.org/videos/awesomevid1.lpxml&lt;/program&gt;</p>
<p>&lt;elapsed&gt;20&lt;/elapsed&gt;</p>
<p>&lt;/lp&gt;</p>
<p>&lt;/code&gt;</p>
<p>The player would then follow that link to get the content and some meta data about the content.  It would also  use the elapsed value to sync up with how far into the program everyone is.  Of course, if it&#8217;s a live stream, the elapsed value may not be necessary.  The program link might look something like this:</p>
<p>&lt;code&gt;</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?&gt;</p>
<p>&lt;lp version=&#8221;0.1&#8243; xmlns:lpxml=&#8221;http://www.lpxml.org/lpxml.dtd&#8221;&gt;</p>
<p>&lt;content size=&#8221;small&#8221; codec=&#8221;quicktime&#8221; bitrate=&#8221;100k&#8221;&gt;http://spaceislimited.org/videos/awesomevid1_lowres.mov&lt;content/&gt;</p>
<p>&lt;content size=&#8221;medium&#8221; codec=&#8221;quicktime&#8221; bitrate=&#8221;200k&#8221;&gt;http://spaceislimited.org/videos/awesomevid1_mediumres.mov&lt;content/&gt;</p>
<div>
<p>&lt;content size=&#8221;high&#8221; codec=&#8221;quicktime&#8221; bitrate=&#8221;300k&#8221;&gt;http://spaceislimited.org/videos/awesomevid1_highres.move&lt;content/&gt;</p>
<p>&lt;language&gt;en-us&lt;/language&gt;</p>
<p>&lt;title&gt;Awesome Vid &#8211; 1&lt;/title&gt;</p>
<p>&lt;description&gt;This is part one of an awesome video I made and you should check it out.&lt;/description&gt;</p></div>
<p>&lt;/lp&gt;</p>
<p>&lt;/code&gt;</p>
<p>Depending on the player, it can choose one of three files to stream, each with a different bitrate.  For example, if you had an LPlayer on your iPhone, maybe it would choose the 100k stream, while your home computer might opt for the 300k stream.  Also, the rest of the meta-data is standard stuff which could be used within the application.</p>
<p>So what happens when the video is done?  Simple, the player would then go fetch the /lplayer/now/ link again and get what&#8217;s playing now!  If it still sees the same entry, it might wait a few seconds and try again (maybe your lp server site is so awesome it&#8217;s having trouble responding).  Or the application could try /lplayer/next/ and get what&#8217;s playing next.  That way, your iPhone can start buffering what&#8217;s next a few seconds before!</p>
<h2>A Call to Arms</h2>
<p>I&#8217;m publishing this as an informal standard and I&#8217;d love to see your comments behind this.  More than that, I&#8217;d love to see people who are willing to work on this with me on setting up a community around this and implementing a free server and player for the &#8220;LP&#8221; standard.  For this standard to work, it needs to be open, simple, and platform and codec agnostic.  I haven&#8217;t said anything about needing to use the QuickTime codec or having to choose a standard bitrate.  This is about discovery and enabling the player to make the right choice.  Attached is the standard&#8211;plain and simple for now.  In the coming weeks I&#8217;m going to work on <span style="text-decoration: line-through;">getting a site</span> (<a title="LPXML.ORG" href="http://www.lpxml.org" target="_blank">lpxml.org</a>), wiki, forum, and <span style="text-decoration: line-through;">mailing list</span> (lpxml [at] googlegroups [dot] com) setup so we as a community can work on this.  I hope you&#8217;ll join me.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this Post!</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F10%2F12%2Fa-new-way-to-surf-lp%2F&amp;title=A%20New%20Way%20To%20Surf%20-%20LP&amp;bodytext=%0D%0A%0D%0AEveryone%27s%20talking%20about%20IP%20TV%20and%20how%20it%27s%20going%20to%20revolutionize%20things.%20%20We%27ll%20be%20able%20to%20get%20our%20TV%20anywhere%2C%20any%20way%2C%20but%20the%20reality%20has%20fallen%20short%20of%20the%20promise.%20%20%20Your%20ISP%20may%20be%20beaming%20Digital%20channels%20down%20to%20you%20over%20IP%2C%20but%20the%20ex" title="Digg"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F10%2F12%2Fa-new-way-to-surf-lp%2F&amp;title=A%20New%20Way%20To%20Surf%20-%20LP" title="Reddit"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F10%2F12%2Fa-new-way-to-surf-lp%2F&amp;title=A%20New%20Way%20To%20Surf%20-%20LP&amp;notes=%0D%0A%0D%0AEveryone%27s%20talking%20about%20IP%20TV%20and%20how%20it%27s%20going%20to%20revolutionize%20things.%20%20We%27ll%20be%20able%20to%20get%20our%20TV%20anywhere%2C%20any%20way%2C%20but%20the%20reality%20has%20fallen%20short%20of%20the%20promise.%20%20%20Your%20ISP%20may%20be%20beaming%20Digital%20channels%20down%20to%20you%20over%20IP%2C%20but%20the%20ex" title="del.icio.us"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F10%2F12%2Fa-new-way-to-surf-lp%2F&amp;t=A%20New%20Way%20To%20Surf%20-%20LP" title="Facebook"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F10%2F12%2Fa-new-way-to-surf-lp%2F" title="Technorati"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.propeller.com/submit/?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F10%2F12%2Fa-new-way-to-surf-lp%2F" title="Propeller"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/propeller.png" title="Propeller" alt="Propeller" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.newsvine.com/_tools/seed&amp;save?u=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F10%2F12%2Fa-new-way-to-surf-lp%2F&amp;h=A%20New%20Way%20To%20Surf%20-%20LP" title="NewsVine"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/newsvine.png" title="NewsVine" alt="NewsVine" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F10%2F12%2Fa-new-way-to-surf-lp%2F&amp;title=A%20New%20Way%20To%20Surf%20-%20LP&amp;annotation=%0D%0A%0D%0AEveryone%27s%20talking%20about%20IP%20TV%20and%20how%20it%27s%20going%20to%20revolutionize%20things.%20%20We%27ll%20be%20able%20to%20get%20our%20TV%20anywhere%2C%20any%20way%2C%20but%20the%20reality%20has%20fallen%20short%20of%20the%20promise.%20%20%20Your%20ISP%20may%20be%20beaming%20Digital%20channels%20down%20to%20you%20over%20IP%2C%20but%20the%20ex" title="Google Bookmarks"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F10%2F12%2Fa-new-way-to-surf-lp%2F&amp;title=A%20New%20Way%20To%20Surf%20-%20LP" title="StumbleUpon"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="" title="Ma.gnolia"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/" title="Ma.gnolia" alt="Ma.gnolia" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="" title="YahooMyWeb"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/" title="YahooMyWeb" alt="YahooMyWeb" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.netvouz.com/action/submitBookmark?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F10%2F12%2Fa-new-way-to-surf-lp%2F&amp;title=A%20New%20Way%20To%20Surf%20-%20LP&amp;popup=no" title="Netvouz"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/netvouz.png" title="Netvouz" alt="Netvouz" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F10%2F12%2Fa-new-way-to-surf-lp%2F&amp;title=A%20New%20Way%20To%20Surf%20-%20LP" title="blogmarks"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/blogmarks.png" title="blogmarks" alt="blogmarks" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://laststop.spaceislimited.org/2008/10/12/a-new-way-to-surf-lp/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Programming Pong in C and OpenGL &#8211; Part V</title>
		<link>http://laststop.spaceislimited.org/2008/07/22/programming-pong-in-c-and-opengl-part-v/</link>
		<comments>http://laststop.spaceislimited.org/2008/07/22/programming-pong-in-c-and-opengl-part-v/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 00:42:40 +0000</pubDate>
		<dc:creator>Timothy M. Rodriguez</dc:creator>
				<category><![CDATA[Technical Nonsense]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[glut]]></category>
		<category><![CDATA[mac os x]]></category>
		<category><![CDATA[opengl]]></category>
		<category><![CDATA[pong]]></category>

		<guid isPermaLink="false">http://laststop.spaceislimited.org/?p=23</guid>
		<description><![CDATA[It’s been a while since I last updated on this, but hopefully you’ve brushed up on your C and OpenGL skills.  Here you&#8217;ll find the entire source code to a pong implementation in C and OpenGL. Enjoy! In interest of actually finally getting this post out the door, I’m just going to post the code!  [...]]]></description>
			<content:encoded><![CDATA[<p>It’s been a while since I last updated on this, but hopefully you’ve brushed up on your C and OpenGL skills.  Here you&#8217;ll find the entire source code to a pong implementation in C and OpenGL.</p>
<h3>Enjoy!</h3>
<p><span id="more-23"></span></p>
<p>In interest of actually finally getting this post out the door, I’m just going to post the code!  This is actually a snapshot of the code from a month or so back and I apologize for not tidying it up.  The reason I’m using a snapshot from a while back is because I have a newer, more glitzy version with a scoreboard and some simple effects that aren’t really necessary to get the basic game down.  I will post that code in a future post though when I’ve polished it up a bit more!  This is also most definitely not up to proper coding standards, but it gets the job done.  It was a late night hack-fest, so please disregard the lack of neatness!</p>
<h3>A word on use..</h3>
<p>You’re free to use the code however you like.  If you use it though, I would most definitely appreciate it if you post a link to <a title="Last Stop" href="http://laststop.spaceislimited.org" target="_blank">Last Stop</a> on your website or blog and a mention in the credits of the application.  Please also credit the references to Timothy M. Rodriguez.  You don’t have to do this, but it’d be nice.  I’d also very much love an e-mail or comment letting me know about your project!</p>
<h3>On to the Code!</h3>
<blockquote><p>#include &lt;stdlib.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;math.h&gt;</p>
<p>#include &lt;GLUT/glut.h&gt;</p>
<p>static int lastFrameTime = 0, windowWidth = 0, windowHeight = 0, now = 0;<br />
static float midWidth = 0, midHeight = 0;<br />
static float elapsedTime = 0, elapsedMilliSeconds = 0;<br />
static char player1Move = 0, player2Move = 0;<br />
static float player1V = 0, player2V = 0;</p>
<p>static float PI = 3.14159265358979323846264;</p>
<p>//scores<br />
static int player1Score = 0, player2Score = 0;</p>
<p>//the following variables calculate a random starting projectile trajectory<br />
static float randomDirection;<br />
static long longMax = 0x7fffffff;    //max of longs 2^31-1 (2^(n-1)-1 for 2&#8242;s complement) static float trajectory[2] = {0, 0};</p>
<p>static float projMove[2] = {0, 0};<br />
static double trajectory[2] = {0, 0};<br />
static char moveSpeed = 70;</p>
<p>void resetProjectile(void) {<br />
//set starting random trajectory<br />
randomDirection = 2 * PI * (float) random() / (float) 0x7fffffff;<br />
trajectory[0] = (float) cos(randomDirection);<br />
trajectory[1] = (float) sin(randomDirection);<br />
projMove[0] = midWidth;<br />
projMove[1] = midHeight;<br />
}</p>
<p>void display(void)<br />
{<br />
//get window parameters<br />
windowWidth = glutGet(GLUT_WINDOW_WIDTH);<br />
windowHeight = glutGet(GLUT_WINDOW_HEIGHT);</p>
<p>midWidth = windowWidth/2;<br />
midHeight = windowHeight/2;</p>
<p>//start timing code<br />
if (lastFrameTime == 0) {<br />
lastFrameTime = glutGet(GLUT_ELAPSED_TIME);<br />
resetProjectile();    //since this is the fist time, this is actually a set <img src='http://laststop.spaceislimited.org/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /><br />
}</p>
<p>now = glutGet(GLUT_ELAPSED_TIME);<br />
elapsedMilliSeconds = now &#8211; lastFrameTime;<br />
elapsedTime = elapsedMilliSeconds/1000.0f;<br />
lastFrameTime = now;</p>
<p>glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);<br />
glShadeModel(GL_FLAT);</p>
<p>//calculate move distances<br />
switch (player1Move) {<br />
case 1:        //move up<br />
player1V += 150 * elapsedTime;<br />
break;<br />
case -1:    //move up<br />
player1V -= 150 * elapsedTime;<br />
break;<br />
default:    //do nothing<br />
break;<br />
}<br />
//check out of bounds<br />
if (player1V &gt; (windowHeight/2)-50) {<br />
//bounce back<br />
player1Move = -1;<br />
}<br />
if (player1V &lt; -(windowHeight/2)+50) {<br />
//bounce back other way<br />
player1Move = 1;<br />
}</p>
<p>switch (player2Move) {<br />
case 1:        //move up<br />
player2V += 150 * elapsedTime;<br />
break;<br />
case -1:    //move up<br />
player2V -= 150 * elapsedTime;<br />
break;<br />
default:    //do nothing<br />
break;<br />
}<br />
//check out of bounds<br />
if (player2V &gt; (windowHeight/2)-50) {<br />
//bounce back<br />
player2Move = -1;<br />
}<br />
if (player2V &lt; -(windowHeight/2)+50) {<br />
//bounc back other way<br />
player2Move = 1;<br />
}</p>
<p>//create and position player 1<br />
glPushMatrix();</p>
<p>glColor3ub(255, 0, 0);    //red</p>
<p>glTranslatef(0.0f, player1V, 0.0f);</p>
<p>glBegin(GL_QUADS);<br />
glVertex2f(20.0f, (midHeight-50));<br />
glVertex2f(20.0f, (midHeight+50));<br />
glVertex2f(50.0f, (midHeight+50));<br />
glVertex2f(50.0f, (midHeight-50));<br />
glEnd();</p>
<p>glPopMatrix();</p>
<p>//create and position player 2<br />
glPushMatrix();</p>
<p>glColor3ub(0, 0, 255);    //blue</p>
<p>glTranslatef(0.0f, player2V, 0.0f);</p>
<p>glBegin(GL_QUADS);<br />
glVertex2f(windowWidth-20.0f, (midHeight-50));<br />
glVertex2f(windowWidth-20.0f, (midHeight+50));<br />
glVertex2f(windowWidth-50.0f, (midHeight+50));<br />
glVertex2f(windowWidth-50.0f, (midHeight-50));<br />
glEnd();</p>
<p>glPopMatrix();</p>
<p>/***************************************<br />
*    Projectile CODE!!!<br />
*<br />
***************************************/</p>
<p>//calculate move distances<br />
projMove[0] += moveSpeed * trajectory[0] * elapsedTime;<br />
projMove[1] += moveSpeed * trajectory[1] * elapsedTime;</p>
<p>//create and move projectile<br />
glPushMatrix();</p>
<p>glColor3ub(255, 255, 255);</p>
<p>glTranslatef(projMove[0], projMove[1], 0.0f);</p>
<p>glBegin(GL_QUADS);<br />
glVertex2f(-10, -10);<br />
glVertex2f(10, -10);<br />
glVertex2f(10, 10);<br />
glVertex2f(-10, 10);<br />
glEnd();</p>
<p>glPopMatrix();</p>
<p>//set bounds for projectile<br />
if (projMove[0] &gt; (windowWidth)) {    //player 1 scored &#8211; out of bounds right<br />
player1Score++;<br />
printf(&#8220;Player 1 Scored!  Score: %f &#8220;, player1Score);<br />
printf(&#8220;projMove[0] %f projMove[1] %f &#8220;, projMove[0], projMove[1]);<br />
resetProjectile();<br />
}</p>
<p>if (projMove[0] &lt; (0)) {        //player 2 scored &#8211; out of bounds left<br />
player2Score++;<br />
resetProjectile();<br />
}</p>
<p>if (projMove[1] &gt; (windowHeight)) {    //out of bounds top<br />
resetProjectile();<br />
}</p>
<p>if (projMove[1] &lt; (0)) {    //out of bounds bottom<br />
resetProjectile();<br />
}</p>
<p>//collision detection code</p>
<p>/******************************<br />
*  END PROJECTILE CODE<br />
*<br />
******************************/</p>
<p>glutSwapBuffers();</p>
<p>}</p>
<p>void reshape(int width, int height)<br />
{<br />
glViewport(0, 0, width, height);</p>
<p>glMatrixMode(GL_PROJECTION);<br />
glLoadIdentity();<br />
gluOrtho2D(0, width, 0, height);<br />
glMatrixMode(GL_MODELVIEW);<br />
}</p>
<p>void idle(void)<br />
{<br />
glutPostRedisplay();<br />
}</p>
<p>void keyboard(unsigned char key, int x, int y) {<br />
switch (key) {<br />
case &#8216;w&#8217;:<br />
//do something<br />
player1Move=1;<br />
glutPostRedisplay();<br />
break;<br />
case &#8216;s&#8217;:<br />
//do something<br />
player1Move=-1;<br />
glutPostRedisplay();<br />
break;<br />
case &#8216;a&#8217;:<br />
player1Move=0;<br />
glutPostRedisplay();<br />
break;<br />
case &#8216;o&#8217;:<br />
//do something<br />
player2Move=1;<br />
glutPostRedisplay();<br />
break;<br />
case &#8216;l&#8217;:<br />
//do something<br />
player2Move=-1;<br />
glutPostRedisplay();<br />
break;<br />
case &#8216;k&#8217;:<br />
player2Move=0;<br />
glutPostRedisplay();<br />
break;<br />
default:<br />
//some other key<br />
break;<br />
}</p>
<p>}</p>
<p>void keyboardup(unsigned char key, int x, int y) {<br />
switch (key) {<br />
case &#8216;i&#8217;:<br />
//do something<br />
player1Move=0;<br />
glutPostRedisplay();<br />
break;<br />
case &#8216;u&#8217;:<br />
player2Move=0;<br />
glutPostRedisplay();<br />
break;<br />
default:<br />
//some other key<br />
break;<br />
}</p>
<p>}</p>
<p>int main(int argc, char** argv)<br />
{<br />
glutInit(&amp;argc, argv);</p>
<p>glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);<br />
glutInitWindowSize(500, 500);</p>
<p>glutCreateWindow(&#8220;Tim GL&#8221;);</p>
<p>glutDisplayFunc(display);<br />
glutReshapeFunc(reshape);<br />
glutKeyboardFunc(keyboard);<br />
glutKeyboardUpFunc(keyboardup);<br />
glutIdleFunc(idle);</p>
<p>glutMainLoop();<br />
return EXIT_SUCCESS;<br />
}</p></blockquote>
<p>Well that&#8217;s a lot of code, but don&#8217;t be intimidated!  If you read through it (maybe a couple of times), you&#8217;ll start to understand it.  The main loop is short and sweet.  We start glut, create a window with it, and then register callback functions for displaying the game, reshaping (what to do if someone changes the size of the window), and for keyboard downpress and release events (keyboard func and keyboardupfunct).  Our display function then pretty much does all the work, and I use a bunch of global variables to keep track of state, such as where the projectile and the paddles are.  There&#8217;s also some brute force vanilla collision detection, which I hope you can appreciate.  The funny part is that most real collision detection systems use this concept, called the bounding box.  In pong, the bounding box of the paddle <em>is</em> the paddle.</p>
<p>You can get a compiled Mac OS X version <a title="Pong for Mac OS X" href="http://laststop.spaceislimited.org/downloads/TimGL.zip" target="_self">here</a>, but if you have your IDE setup right a straight copy and paste <em>should</em> work.  (If you had to make any changes, please let me know.)</p>
<p>Let any and all questions loose in the comments..</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this Post!</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F07%2F22%2Fprogramming-pong-in-c-and-opengl-part-v%2F&amp;title=Programming%20Pong%20in%20C%20and%20OpenGL%20-%20Part%20V&amp;bodytext=It%E2%80%99s%20been%20a%20while%20since%20I%20last%20updated%20on%20this%2C%20but%20hopefully%20you%E2%80%99ve%20brushed%20up%20on%20your%20C%20and%20OpenGL%20skills.%C2%A0%20Here%20you%27ll%20find%20the%20entire%20source%20code%20to%20a%20pong%20implementation%20in%20C%20and%20OpenGL.%0D%0AEnjoy%21%0D%0A%0D%0A%0D%0AIn%20interest%20of%20actually%20finally%20getting%20" title="Digg"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F07%2F22%2Fprogramming-pong-in-c-and-opengl-part-v%2F&amp;title=Programming%20Pong%20in%20C%20and%20OpenGL%20-%20Part%20V" title="Reddit"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F07%2F22%2Fprogramming-pong-in-c-and-opengl-part-v%2F&amp;title=Programming%20Pong%20in%20C%20and%20OpenGL%20-%20Part%20V&amp;notes=It%E2%80%99s%20been%20a%20while%20since%20I%20last%20updated%20on%20this%2C%20but%20hopefully%20you%E2%80%99ve%20brushed%20up%20on%20your%20C%20and%20OpenGL%20skills.%C2%A0%20Here%20you%27ll%20find%20the%20entire%20source%20code%20to%20a%20pong%20implementation%20in%20C%20and%20OpenGL.%0D%0AEnjoy%21%0D%0A%0D%0A%0D%0AIn%20interest%20of%20actually%20finally%20getting%20" title="del.icio.us"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F07%2F22%2Fprogramming-pong-in-c-and-opengl-part-v%2F&amp;t=Programming%20Pong%20in%20C%20and%20OpenGL%20-%20Part%20V" title="Facebook"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F07%2F22%2Fprogramming-pong-in-c-and-opengl-part-v%2F" title="Technorati"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.propeller.com/submit/?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F07%2F22%2Fprogramming-pong-in-c-and-opengl-part-v%2F" title="Propeller"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/propeller.png" title="Propeller" alt="Propeller" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.newsvine.com/_tools/seed&amp;save?u=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F07%2F22%2Fprogramming-pong-in-c-and-opengl-part-v%2F&amp;h=Programming%20Pong%20in%20C%20and%20OpenGL%20-%20Part%20V" title="NewsVine"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/newsvine.png" title="NewsVine" alt="NewsVine" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F07%2F22%2Fprogramming-pong-in-c-and-opengl-part-v%2F&amp;title=Programming%20Pong%20in%20C%20and%20OpenGL%20-%20Part%20V&amp;annotation=It%E2%80%99s%20been%20a%20while%20since%20I%20last%20updated%20on%20this%2C%20but%20hopefully%20you%E2%80%99ve%20brushed%20up%20on%20your%20C%20and%20OpenGL%20skills.%C2%A0%20Here%20you%27ll%20find%20the%20entire%20source%20code%20to%20a%20pong%20implementation%20in%20C%20and%20OpenGL.%0D%0AEnjoy%21%0D%0A%0D%0A%0D%0AIn%20interest%20of%20actually%20finally%20getting%20" title="Google Bookmarks"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F07%2F22%2Fprogramming-pong-in-c-and-opengl-part-v%2F&amp;title=Programming%20Pong%20in%20C%20and%20OpenGL%20-%20Part%20V" title="StumbleUpon"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="" title="Ma.gnolia"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/" title="Ma.gnolia" alt="Ma.gnolia" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="" title="YahooMyWeb"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/" title="YahooMyWeb" alt="YahooMyWeb" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.netvouz.com/action/submitBookmark?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F07%2F22%2Fprogramming-pong-in-c-and-opengl-part-v%2F&amp;title=Programming%20Pong%20in%20C%20and%20OpenGL%20-%20Part%20V&amp;popup=no" title="Netvouz"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/netvouz.png" title="Netvouz" alt="Netvouz" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F07%2F22%2Fprogramming-pong-in-c-and-opengl-part-v%2F&amp;title=Programming%20Pong%20in%20C%20and%20OpenGL%20-%20Part%20V" title="blogmarks"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/blogmarks.png" title="blogmarks" alt="blogmarks" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://laststop.spaceislimited.org/2008/07/22/programming-pong-in-c-and-opengl-part-v/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>To Hell &amp; Back &#8211; A Story of Windows Vista</title>
		<link>http://laststop.spaceislimited.org/2008/06/16/to-hell-back-a-story-of-windows-vista/</link>
		<comments>http://laststop.spaceislimited.org/2008/06/16/to-hell-back-a-story-of-windows-vista/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 15:22:39 +0000</pubDate>
		<dc:creator>Timothy M. Rodriguez</dc:creator>
				<category><![CDATA[Rants]]></category>
		<category><![CDATA[Technical Nonsense]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[problems]]></category>
		<category><![CDATA[vista]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://laststop.spaceislimited.org/?p=19</guid>
		<description><![CDATA[I recently helped my nephew Peter do a massive overhaul/upgrade of his current PC. We basically rebuilt his PC and the only thing he kept was his recently purchased insane-o vid card and his hard drive. Several hours later we had his new PC up and running&#8211;hardware wise at least. One of the orders of [...]]]></description>
			<content:encoded><![CDATA[<p>I recently helped my nephew Peter do a massive overhaul/upgrade of his current PC.  We basically rebuilt his PC and the only thing he kept was his recently purchased insane-o vid card and his hard drive.  Several hours later we had his new PC up and running&#8211;hardware wise at least.</p>
<p>One of the orders of the day&#8211;much to my dismay&#8211;was to install Windows Vista.  I advised him not too, but he got his aunt to get it for him for his birthday and he rationalized his defiance of my advice on DirectX 10.  (Truth be told, I sabotaged myself by telling him it was one of the only neat features of Vista, outside of massive memory footprint and overall sluggishness.)</p>
<p>And so our journey began..</p>
<p>I&#8217;d like to tell you it didn&#8217;t take us in excess of 2 days to get Vista installed.  I mean, I&#8217;ve been building PCs for years now and I&#8217;m a recent grad of Computer Engineering (I know the two aren&#8217;t the same, but still..).  Piece of cake, right?</p>
<p><strong>Wrong</strong>.</p>
<p><span id="more-19"></span></p>
<p>To be fair (to myself and Microsoft), I had helped him install Vista on his PC after he got his video card a few short months ago, but after we changed all the hardware from under it, it refused to boot.  Which left us with the odd job of installing Vista fresh off an upgrade CD.  I knew from previous reading on the web, it would probably only take a call to Microsoft and that they were quite helpful in arranging for you to keep your upgrade in these circumstances, so we marched onward.</p>
<h3>First things first..</h3>
<p>First things first, stick the CD in the tray, make sure the BIOS is set to boot from CD, and let boot.  Okay great, we got the usual install screens, but then Vista says it detects a previous version of Windows installed.  It then asks me to boot into it and install Vista from there.  Fair enough, except I <em>can&#8217;t</em> boot from Vista now!  We then chose the option to install Vista and have it verified later.  This worked great, full of progress for about 20 minutes, after which, it hung.  We then went on to try everything to get it installed.  Including just plain trying over and over again.  Sometimes we got a little bit further, but it always hung.  I thought maybe his Vista CD got too scratched up and it was bad.  I burned a copy of an ISO I had (a legit one from a student/Microsoft coop my school runs) and tried the same thing with that.  No dice.  Being that major OEMs don&#8217;t ship install CDs anymore (a ridiculous practice) we couldn&#8217;t go back and install his copy of Media Center Edition again and upgrade off that.  I went home and hunted for some Win2k or XP cds, but I had no serial keys.</p>
<p>While I was home hunting for software, my nephew was calling Microsoft.  The first thing they told him was, take out the memory, you have too much.  Too much?  Vista basically begs for 4 gigs or more (we had exactly 4, for the record). What do you mean Vista won&#8217;t install with 4 gigs.  &#8220;Preposterous,&#8221; I said to my nephew when I got back.  &#8220;There&#8217;s no way.  XP installs just fine with 4 gigs!,&#8221; I yelled.  We eventually even tried just putting two sticks or RAM in to see what happened.  Still issues.  We continued to try to fiddle with the machine for several more hours before I caved and said, &#8220;Let&#8217;s just call MS Tech Support and see what they say.  We&#8217;ll get someone <em>real</em> on the phone this time.&#8221;</p>
<p>Before I get started, I do have to say, MS Tech support was very nice (yes, even the team in India we were eventually forwarded too).  But again, the first thing we were told was &#8220;Too much memory.  Take all the sticks out and put one back in.&#8221;  Upset, I agreed and took everything out except for one stick.</p>
<p>Eventually, Vista installed just fine.</p>
<h2>Vista just can&#8217;t address 4 Gigs of memory on install!</h2>
<p>I told the tech this is a major regression, considering XP installs just fine.   The tech then proceeded on as if it were not a bug, but just an issue of our hardware setup.  Keep in mind, the Tech did not ask us what our board, or our processor, was until much later in the process.  The first thing they said was take all the sticks out.  After some bickering, I eventually got the tech to let me in on the little secret that Vista can&#8217;t address that much memory on installation and that it is a known issue that was resolved in the SP1 discs.  Is it just me, or is this an absolutely horrendous oversight?  I&#8217;m not going to rehash the standard Vista bashing, but this just goes to show why firms and home users alike are staying away from Vista.  The irony is that despite it&#8217;s massive delays, Vista was rushed.  A lot of this has to do with the fact that they threw away all their work and restarted with a far smaller scope than originally intended for Longhorn, but there plain simply still wasn&#8217;t enough time.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this Post!</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F06%2F16%2Fto-hell-back-a-story-of-windows-vista%2F&amp;title=To%20Hell%20%26%20Back%20-%20A%20Story%20of%20Windows%20Vista&amp;bodytext=I%20recently%20helped%20my%20nephew%20Peter%20do%20a%20massive%20overhaul%2Fupgrade%20of%20his%20current%20PC.%20%20We%20basically%20rebuilt%20his%20PC%20and%20the%20only%20thing%20he%20kept%20was%20his%20recently%20purchased%20insane-o%20vid%20card%20and%20his%20hard%20drive.%20%20Several%20hours%20later%20we%20had%20his%20new%20PC%20up%20and%20" title="Digg"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F06%2F16%2Fto-hell-back-a-story-of-windows-vista%2F&amp;title=To%20Hell%20%26%20Back%20-%20A%20Story%20of%20Windows%20Vista" title="Reddit"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F06%2F16%2Fto-hell-back-a-story-of-windows-vista%2F&amp;title=To%20Hell%20%26%20Back%20-%20A%20Story%20of%20Windows%20Vista&amp;notes=I%20recently%20helped%20my%20nephew%20Peter%20do%20a%20massive%20overhaul%2Fupgrade%20of%20his%20current%20PC.%20%20We%20basically%20rebuilt%20his%20PC%20and%20the%20only%20thing%20he%20kept%20was%20his%20recently%20purchased%20insane-o%20vid%20card%20and%20his%20hard%20drive.%20%20Several%20hours%20later%20we%20had%20his%20new%20PC%20up%20and%20" title="del.icio.us"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F06%2F16%2Fto-hell-back-a-story-of-windows-vista%2F&amp;t=To%20Hell%20%26%20Back%20-%20A%20Story%20of%20Windows%20Vista" title="Facebook"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F06%2F16%2Fto-hell-back-a-story-of-windows-vista%2F" title="Technorati"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.propeller.com/submit/?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F06%2F16%2Fto-hell-back-a-story-of-windows-vista%2F" title="Propeller"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/propeller.png" title="Propeller" alt="Propeller" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.newsvine.com/_tools/seed&amp;save?u=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F06%2F16%2Fto-hell-back-a-story-of-windows-vista%2F&amp;h=To%20Hell%20%26%20Back%20-%20A%20Story%20of%20Windows%20Vista" title="NewsVine"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/newsvine.png" title="NewsVine" alt="NewsVine" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F06%2F16%2Fto-hell-back-a-story-of-windows-vista%2F&amp;title=To%20Hell%20%26%20Back%20-%20A%20Story%20of%20Windows%20Vista&amp;annotation=I%20recently%20helped%20my%20nephew%20Peter%20do%20a%20massive%20overhaul%2Fupgrade%20of%20his%20current%20PC.%20%20We%20basically%20rebuilt%20his%20PC%20and%20the%20only%20thing%20he%20kept%20was%20his%20recently%20purchased%20insane-o%20vid%20card%20and%20his%20hard%20drive.%20%20Several%20hours%20later%20we%20had%20his%20new%20PC%20up%20and%20" title="Google Bookmarks"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F06%2F16%2Fto-hell-back-a-story-of-windows-vista%2F&amp;title=To%20Hell%20%26%20Back%20-%20A%20Story%20of%20Windows%20Vista" title="StumbleUpon"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="" title="Ma.gnolia"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/" title="Ma.gnolia" alt="Ma.gnolia" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="" title="YahooMyWeb"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/" title="YahooMyWeb" alt="YahooMyWeb" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.netvouz.com/action/submitBookmark?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F06%2F16%2Fto-hell-back-a-story-of-windows-vista%2F&amp;title=To%20Hell%20%26%20Back%20-%20A%20Story%20of%20Windows%20Vista&amp;popup=no" title="Netvouz"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/netvouz.png" title="Netvouz" alt="Netvouz" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F06%2F16%2Fto-hell-back-a-story-of-windows-vista%2F&amp;title=To%20Hell%20%26%20Back%20-%20A%20Story%20of%20Windows%20Vista" title="blogmarks"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/blogmarks.png" title="blogmarks" alt="blogmarks" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://laststop.spaceislimited.org/2008/06/16/to-hell-back-a-story-of-windows-vista/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Technology of a 3D Engine</title>
		<link>http://laststop.spaceislimited.org/2008/05/22/technology-of-a-3d-engine/</link>
		<comments>http://laststop.spaceislimited.org/2008/05/22/technology-of-a-3d-engine/#comments</comments>
		<pubDate>Thu, 22 May 2008 14:49:10 +0000</pubDate>
		<dc:creator>Timothy M. Rodriguez</dc:creator>
				<category><![CDATA[Technical Nonsense]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[engine]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[scenegraph]]></category>

		<guid isPermaLink="false">http://laststop.spaceislimited.org/?p=15</guid>
		<description><![CDATA[There&#8217;s a great article on Beyond3D about the technology of a 3D engine. The article&#8217;s split up into parts and part two was just released (after a several month wait!). Part one discusses a lot of the general concepts for a 3D engine design in an easy to read and abstract level, but part two [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://laststop.spaceislimited.org/wp-content/uploads/2008/05/400px-octree2.png"><img class="aligncenter size-full wp-image-16" title="400px-octree2" src="http://laststop.spaceislimited.org/wp-content/uploads/2008/05/400px-octree2.png" alt="Lions and Tigers and Octrees!  Oh My!" width="400" height="230" /></a></p>
<p>There&#8217;s a great article on Beyond3D about the technology of a 3D engine.  The article&#8217;s split up into parts and part two was just released (after a several month wait!).  Part one discusses a lot of the general concepts for a 3D engine design in an easy to read and abstract level, but part two goes into deeper detail.  Both make for interesting reads, though part two sort of jumps into an ocean at no discernible point.  (It covers scenegraphs I know, but why start there?  Why not animation?  Look for my own part two of programming a pong clone to animation and early concepts in game programming.)</p>
<ul>
<li><a title="Tech of a 3D Engine - Part 1" href="http://www.beyond3d.com/content/articles/98" target="_blank">Part One</a></li>
<li><a title="Tech of a 3d Engine - Part 2" href="http://beyond3d.com/content/articles/102" target="_blank">Part Two</a></li>
</ul>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this Post!</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F22%2Ftechnology-of-a-3d-engine%2F&amp;title=Technology%20of%20a%203D%20Engine&amp;bodytext=%0D%0A%0D%0AThere%27s%20a%20great%20article%20on%20Beyond3D%20about%20the%20technology%20of%20a%203D%20engine.%20%20The%20article%27s%20split%20up%20into%20parts%20and%20part%20two%20was%20just%20released%20%28after%20a%20several%20month%20wait%21%29.%20%20Part%20one%20discusses%20a%20lot%20of%20the%20general%20concepts%20for%20a%203D%20engine%20design%20in%20" title="Digg"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F22%2Ftechnology-of-a-3d-engine%2F&amp;title=Technology%20of%20a%203D%20Engine" title="Reddit"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F22%2Ftechnology-of-a-3d-engine%2F&amp;title=Technology%20of%20a%203D%20Engine&amp;notes=%0D%0A%0D%0AThere%27s%20a%20great%20article%20on%20Beyond3D%20about%20the%20technology%20of%20a%203D%20engine.%20%20The%20article%27s%20split%20up%20into%20parts%20and%20part%20two%20was%20just%20released%20%28after%20a%20several%20month%20wait%21%29.%20%20Part%20one%20discusses%20a%20lot%20of%20the%20general%20concepts%20for%20a%203D%20engine%20design%20in%20" title="del.icio.us"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F22%2Ftechnology-of-a-3d-engine%2F&amp;t=Technology%20of%20a%203D%20Engine" title="Facebook"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F22%2Ftechnology-of-a-3d-engine%2F" title="Technorati"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.propeller.com/submit/?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F22%2Ftechnology-of-a-3d-engine%2F" title="Propeller"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/propeller.png" title="Propeller" alt="Propeller" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.newsvine.com/_tools/seed&amp;save?u=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F22%2Ftechnology-of-a-3d-engine%2F&amp;h=Technology%20of%20a%203D%20Engine" title="NewsVine"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/newsvine.png" title="NewsVine" alt="NewsVine" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F22%2Ftechnology-of-a-3d-engine%2F&amp;title=Technology%20of%20a%203D%20Engine&amp;annotation=%0D%0A%0D%0AThere%27s%20a%20great%20article%20on%20Beyond3D%20about%20the%20technology%20of%20a%203D%20engine.%20%20The%20article%27s%20split%20up%20into%20parts%20and%20part%20two%20was%20just%20released%20%28after%20a%20several%20month%20wait%21%29.%20%20Part%20one%20discusses%20a%20lot%20of%20the%20general%20concepts%20for%20a%203D%20engine%20design%20in%20" title="Google Bookmarks"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F22%2Ftechnology-of-a-3d-engine%2F&amp;title=Technology%20of%20a%203D%20Engine" title="StumbleUpon"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="" title="Ma.gnolia"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/" title="Ma.gnolia" alt="Ma.gnolia" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="" title="YahooMyWeb"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/" title="YahooMyWeb" alt="YahooMyWeb" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.netvouz.com/action/submitBookmark?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F22%2Ftechnology-of-a-3d-engine%2F&amp;title=Technology%20of%20a%203D%20Engine&amp;popup=no" title="Netvouz"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/netvouz.png" title="Netvouz" alt="Netvouz" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F22%2Ftechnology-of-a-3d-engine%2F&amp;title=Technology%20of%20a%203D%20Engine" title="blogmarks"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/blogmarks.png" title="blogmarks" alt="blogmarks" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://laststop.spaceislimited.org/2008/05/22/technology-of-a-3d-engine/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Java SE 6 on Mac OS X</title>
		<link>http://laststop.spaceislimited.org/2008/05/01/java-se-6-on-mac-os-x/</link>
		<comments>http://laststop.spaceislimited.org/2008/05/01/java-se-6-on-mac-os-x/#comments</comments>
		<pubDate>Thu, 01 May 2008 01:26:57 +0000</pubDate>
		<dc:creator>Timothy M. Rodriguez</dc:creator>
				<category><![CDATA[Technical Nonsense]]></category>

		<guid isPermaLink="false">http://laststop.spaceislimited.org/2008/05/01/java-se-6-on-mac-os-x/</guid>
		<description><![CDATA[Today Apple finally added support for Java SE 6. This has been a long time coming and lots of people were clamoring that Apple abandoned Java. While it&#8217;s true that Jobs said Java was a &#8220;ball and chain,&#8221; the context was very much that of the iPhone. And Java, despite ubiquity in the phone market, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://laststop.spaceislimited.org/wp-content/uploads/2008/05/fishing-eagle2.jpg" alt="The Eagle has Landed" /></p>
<p>Today Apple finally added support for Java SE 6.  This has been a long time coming and lots of people were clamoring that Apple abandoned Java.  While it&#8217;s true that Jobs said Java was a &#8220;ball and chain,&#8221; the context was very much that of the iPhone.  And Java, despite ubiquity in the phone market, really hasn&#8217;t done much.</p>
<p>There are some caveats to this update though.   It&#8217;s only compatible with Leopard (Mac OS X.5) and it&#8217;s only compatible with 64Bit Intel processors.</p>
<p>But if you&#8217;re a Java developer on Mac OS X who&#8217;s been getting long in the tooth waiting for this, get going.</p>
<p>The eagle has landed.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this Post!</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F01%2Fjava-se-6-on-mac-os-x%2F&amp;title=Java%20SE%206%20on%20Mac%20OS%20X&amp;bodytext=%0D%0A%0D%0AToday%20Apple%20finally%20added%20support%20for%20Java%20SE%206.%20%20This%20has%20been%20a%20long%20time%20coming%20and%20lots%20of%20people%20were%20clamoring%20that%20Apple%20abandoned%20Java.%20%20While%20it%27s%20true%20that%20Jobs%20said%20Java%20was%20a%20%22ball%20and%20chain%2C%22%20the%20context%20was%20very%20much%20that%20of%20the%20iPh" title="Digg"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F01%2Fjava-se-6-on-mac-os-x%2F&amp;title=Java%20SE%206%20on%20Mac%20OS%20X" title="Reddit"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F01%2Fjava-se-6-on-mac-os-x%2F&amp;title=Java%20SE%206%20on%20Mac%20OS%20X&amp;notes=%0D%0A%0D%0AToday%20Apple%20finally%20added%20support%20for%20Java%20SE%206.%20%20This%20has%20been%20a%20long%20time%20coming%20and%20lots%20of%20people%20were%20clamoring%20that%20Apple%20abandoned%20Java.%20%20While%20it%27s%20true%20that%20Jobs%20said%20Java%20was%20a%20%22ball%20and%20chain%2C%22%20the%20context%20was%20very%20much%20that%20of%20the%20iPh" title="del.icio.us"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F01%2Fjava-se-6-on-mac-os-x%2F&amp;t=Java%20SE%206%20on%20Mac%20OS%20X" title="Facebook"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F01%2Fjava-se-6-on-mac-os-x%2F" title="Technorati"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.propeller.com/submit/?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F01%2Fjava-se-6-on-mac-os-x%2F" title="Propeller"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/propeller.png" title="Propeller" alt="Propeller" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.newsvine.com/_tools/seed&amp;save?u=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F01%2Fjava-se-6-on-mac-os-x%2F&amp;h=Java%20SE%206%20on%20Mac%20OS%20X" title="NewsVine"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/newsvine.png" title="NewsVine" alt="NewsVine" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F01%2Fjava-se-6-on-mac-os-x%2F&amp;title=Java%20SE%206%20on%20Mac%20OS%20X&amp;annotation=%0D%0A%0D%0AToday%20Apple%20finally%20added%20support%20for%20Java%20SE%206.%20%20This%20has%20been%20a%20long%20time%20coming%20and%20lots%20of%20people%20were%20clamoring%20that%20Apple%20abandoned%20Java.%20%20While%20it%27s%20true%20that%20Jobs%20said%20Java%20was%20a%20%22ball%20and%20chain%2C%22%20the%20context%20was%20very%20much%20that%20of%20the%20iPh" title="Google Bookmarks"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F01%2Fjava-se-6-on-mac-os-x%2F&amp;title=Java%20SE%206%20on%20Mac%20OS%20X" title="StumbleUpon"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="" title="Ma.gnolia"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/" title="Ma.gnolia" alt="Ma.gnolia" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="" title="YahooMyWeb"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/" title="YahooMyWeb" alt="YahooMyWeb" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.netvouz.com/action/submitBookmark?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F01%2Fjava-se-6-on-mac-os-x%2F&amp;title=Java%20SE%206%20on%20Mac%20OS%20X&amp;popup=no" title="Netvouz"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/netvouz.png" title="Netvouz" alt="Netvouz" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F05%2F01%2Fjava-se-6-on-mac-os-x%2F&amp;title=Java%20SE%206%20on%20Mac%20OS%20X" title="blogmarks"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/blogmarks.png" title="blogmarks" alt="blogmarks" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://laststop.spaceislimited.org/2008/05/01/java-se-6-on-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Pogo Web Browser</title>
		<link>http://laststop.spaceislimited.org/2008/04/23/pogo-web-browser/</link>
		<comments>http://laststop.spaceislimited.org/2008/04/23/pogo-web-browser/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 01:00:36 +0000</pubDate>
		<dc:creator>Timothy M. Rodriguez</dc:creator>
				<category><![CDATA[Technical Nonsense]]></category>
		<category><![CDATA[AT&T]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[Pogo]]></category>
		<category><![CDATA[SMS]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://laststop.spaceislimited.org/?p=3</guid>
		<description><![CDATA[I was going to wait for something more significant to post about, but I just don&#8217;t get this. AT&#38;T is entering the browser market. No, they aren&#8217;t making compasses or providing tours in Venezuela. They&#8217;re making a Web Browser. Yeah. That&#8217;s how I feel. Why in the hell are they making a web browser? Notice [...]]]></description>
			<content:encoded><![CDATA[<p>I was going to wait for something more significant to post about, but I just don&#8217;t get this.  AT&amp;T is entering the browser market.  No, they aren&#8217;t making compasses or providing tours in Venezuela.  They&#8217;re making a Web Browser.</p>
<p>Yeah.  That&#8217;s how I feel.</p>
<p>Why in the hell are they making a web browser?  Notice that I&#8217;m not providing any criticism on the web browser (it actually implements some pretty neat concepts).  I&#8217;m asking a simple question, why?  What does AT&amp;T want in the browser market?  They aren&#8217;t working on a browser they can port to handsets.  This is a bloated browser, with tons of snazzy 3-D functionality  (Check out the Ars <a href="http://arstechnica.com/reviews/apps/pogo-browser-beta-first-look.ars">Pogo Review</a>).  AT&amp;T is going well out of its comfort zone to create a product for a market that is saturated&#8211;if you have trouble believing that, try asking Steve Jobs how Safari on Windows is doing.  Oh, did I mention?  It&#8217;s Windows <em>only</em>.</p>
<p><strong>Do we really need another Windows browser?</strong></p>
<p>Why isn&#8217;t AT&amp;T focusing their efforts on more worthwhile causes, like I don&#8217;t know, unlimited Voice and Data plans for reasonable prices or SMS for something a bit less that highway robbery (<a href="http://gthing.net/the-true-price-of-sms-messages/">The True Price of SMS</a>)?</p>
<p>What do you think?  Let loose some confusion in the comments.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share this Post!</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F04%2F23%2Fpogo-web-browser%2F&amp;title=Pogo%20Web%20Browser&amp;bodytext=I%20was%20going%20to%20wait%20for%20something%20more%20significant%20to%20post%20about%2C%20but%20I%20just%20don%27t%20get%20this.%20%20AT%26amp%3BT%20is%20entering%20the%20browser%20market.%20%20No%2C%20they%20aren%27t%20making%20compasses%20or%20providing%20tours%20in%20Venezuela.%20%20They%27re%20making%20a%20Web%20Browser.%0D%0A%0D%0AYeah.%20%20That%27s%20" title="Digg"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F04%2F23%2Fpogo-web-browser%2F&amp;title=Pogo%20Web%20Browser" title="Reddit"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F04%2F23%2Fpogo-web-browser%2F&amp;title=Pogo%20Web%20Browser&amp;notes=I%20was%20going%20to%20wait%20for%20something%20more%20significant%20to%20post%20about%2C%20but%20I%20just%20don%27t%20get%20this.%20%20AT%26amp%3BT%20is%20entering%20the%20browser%20market.%20%20No%2C%20they%20aren%27t%20making%20compasses%20or%20providing%20tours%20in%20Venezuela.%20%20They%27re%20making%20a%20Web%20Browser.%0D%0A%0D%0AYeah.%20%20That%27s%20" title="del.icio.us"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F04%2F23%2Fpogo-web-browser%2F&amp;t=Pogo%20Web%20Browser" title="Facebook"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://technorati.com/faves?add=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F04%2F23%2Fpogo-web-browser%2F" title="Technorati"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.propeller.com/submit/?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F04%2F23%2Fpogo-web-browser%2F" title="Propeller"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/propeller.png" title="Propeller" alt="Propeller" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.newsvine.com/_tools/seed&amp;save?u=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F04%2F23%2Fpogo-web-browser%2F&amp;h=Pogo%20Web%20Browser" title="NewsVine"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/newsvine.png" title="NewsVine" alt="NewsVine" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F04%2F23%2Fpogo-web-browser%2F&amp;title=Pogo%20Web%20Browser&amp;annotation=I%20was%20going%20to%20wait%20for%20something%20more%20significant%20to%20post%20about%2C%20but%20I%20just%20don%27t%20get%20this.%20%20AT%26amp%3BT%20is%20entering%20the%20browser%20market.%20%20No%2C%20they%20aren%27t%20making%20compasses%20or%20providing%20tours%20in%20Venezuela.%20%20They%27re%20making%20a%20Web%20Browser.%0D%0A%0D%0AYeah.%20%20That%27s%20" title="Google Bookmarks"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F04%2F23%2Fpogo-web-browser%2F&amp;title=Pogo%20Web%20Browser" title="StumbleUpon"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="" title="Ma.gnolia"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/" title="Ma.gnolia" alt="Ma.gnolia" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="" title="YahooMyWeb"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/" title="YahooMyWeb" alt="YahooMyWeb" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.netvouz.com/action/submitBookmark?url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F04%2F23%2Fpogo-web-browser%2F&amp;title=Pogo%20Web%20Browser&amp;popup=no" title="Netvouz"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/netvouz.png" title="Netvouz" alt="Netvouz" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://blogmarks.net/my/new.php?mini=1&amp;simple=1&amp;url=http%3A%2F%2Flaststop.spaceislimited.org%2F2008%2F04%2F23%2Fpogo-web-browser%2F&amp;title=Pogo%20Web%20Browser" title="blogmarks"><img src="http://laststop.spaceislimited.org/wp-content/plugins/sociable/images/blogmarks.png" title="blogmarks" alt="blogmarks" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://laststop.spaceislimited.org/2008/04/23/pogo-web-browser/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
