<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-12483086</id><updated>2011-07-07T19:43:03.583-04:00</updated><category term='screensavers'/><category term='camera solitaire pong'/><category term='cambridge'/><category term='macos'/><category term='dinojam'/><category term='game jam'/><category term='coding projects'/><category term='boston'/><category term='wifi'/><category term='harvard square'/><category term='falling stuff'/><title type='text'>Dereferencing NULL</title><subtitle type='html'>David Ludwig's Tech Blog</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>37</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-12483086.post-3587484227153274962</id><published>2011-06-03T19:59:00.000-04:00</published><updated>2011-06-05T09:47:01.660-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='falling stuff'/><title type='text'>Falling Stuff 1.0b6 for Mac and Windows</title><content type='html'>I have a new beta of the Falling Stuff screensaver ready to go for both Mac and Windows.  Here's what's new:&lt;div&gt;&lt;ul&gt;&lt;li&gt;made lines a bit wider, which should help remove jagged edges.&lt;/li&gt;&lt;li&gt;improved performance on Macs.&lt;/li&gt;&lt;li&gt;added an experimental, screen-blanking battery saver mode for laptops.  If enabled, this'll put the screensaver into a low-power mode when the computer is unplugged.  Nothing will get displayed while in low-power mode, but the battery won't be unnecessarily drained either.  Plugging the power back in will resume the screensaver.  This option is turned off by default and can be turned on in the screensaver's options menu.&lt;/li&gt;&lt;li&gt;new Windows installer (exciting, I know  ;-) )&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Regarding the Mac version, I did have a chance to test it out on a preview release of Mac OS X Lion and it ran great!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Basic information on the screensaver, including installation instructions and a list of configurable options, can be found in its docs.  Here's a link to an online copy:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://alum.wpi.edu/~davidl/Falling_Stuff/Falling_Stuff_about.html"&gt;Falling Stuff Documentation&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Finally, here are the download links:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://alum.wpi.edu/~davidl/Falling_Stuff/latest_windows_build" onClick="javascript: _gaq.push(['_trackEvent', 'Software', 'Download', 'Falling Stuff Windows']);"&gt;Download Falling Stuff for Windows&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://alum.wpi.edu/~davidl/Falling_Stuff/latest_mac_build" onClick="javascript: _gaq.push(['_trackEvent', 'Software', 'Download', 'Falling Stuff Mac']);"&gt;Download Falling Stuff for Mac OS X&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;I hope y'all enjoy it!&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-3587484227153274962?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/3587484227153274962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=3587484227153274962' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/3587484227153274962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/3587484227153274962'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2011/06/falling-stuff-10b6-for-mac-and-windows.html' title='Falling Stuff 1.0b6 for Mac and Windows'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-1898201076292117053</id><published>2011-04-09T18:00:00.000-04:00</published><updated>2011-04-09T23:15:42.008-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='falling stuff'/><title type='text'>Falling Stuff 1.0b4 for Mac OS X Snow Leopard</title><content type='html'>After a somewhat lengthy hiatus, I've released Beta 4 of the Falling Stuff screensaver.  For now, this is a Mac only release, as the only new feature is that the screensaver has is that it's been updated to work on Snow Leopard.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://alum.wpi.edu/~davidl/Falling_Stuff/latest_mac_build"&gt;Download Falling Stuff for Mac OS X&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To install:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Download and extract the zip file.&lt;br /&gt;&lt;li&gt;Double-click on the extracted, "Falling Stuff.saver" file.  This should open Mac OS X's System Preferences app, which'll ask if you want to install it.&lt;br /&gt;&lt;lI&gt;Choose "Falling Stuff" from the list of screen savers to preview it and/or use it as the main screensaver.&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Feedback much welcomed!  I'm especially curious to know if it runs ok on the computers of others.  If so, I may re-release this version as 1.0 final.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-1898201076292117053?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/1898201076292117053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=1898201076292117053' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/1898201076292117053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/1898201076292117053'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2011/04/falling-stuff-10b4-for-mac-os-x-snow.html' title='Falling Stuff 1.0b4 for Mac OS X Snow Leopard'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-2415466614446196246</id><published>2010-09-03T19:43:00.001-04:00</published><updated>2010-09-03T21:46:37.488-04:00</updated><title type='text'>Shell Scripting for MacOS X: Laundry Timer with Text To Speech Synthesis</title><content type='html'>I occasionally forget things.  Yes, I admit it.  In high school, a friend of mine once said that I'd probably forget at home a certain, rear-facing body part if it weren't attached to my body.  He was probably right.&lt;br /&gt;&lt;br /&gt;In my apartment building, there is a small set of laundry machines: one washer and two dryers.  These three machines are to be split between the twelve apartments in the building.  It's not a bad amount of machines, except for when people leave things in the machine for extended periods of time.  Yes, I have been one of these people.  Many apologies to my building mates!&lt;br /&gt;&lt;br /&gt;I had a small minute timer that I used to remind me to move the finished laundry.  It was nice, super-cheap, portable device that worked very well, at least until it died.  Yes, it was ever so slightly tragic, and involved some amount of leaky battery goo.  This really shouldn't have been much of a problem, at least in relation to my bad retrieval-of-laundry habits.  I could have used one of the other timers in my house, such as the one on the microwave.  For a while, that's what I did, except I occasionally missed hearing it, either from being in the wrong room at the wrong time, having headphones on, etc.&lt;br /&gt;&lt;br /&gt;This morning, I started trying a slightly different solution.  I wrote a simple shell script to tell me when to move my laundry.  It started by using the &lt;a href="http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/sleep.1.html"&gt;sleep&lt;/a&gt; command to wait the proper number of seconds needed for whatever cycle I'd be on (1500 seconds for a wash cycle in my building, 3600 for a dryer load).  When the laundry is done, it would use MacOS X's text-to-speech synthesis libraries (via the '&lt;a href="http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/say.1.html"&gt;say&lt;/a&gt;' command) to verbally announce the machine's completion.&lt;br /&gt;&lt;br /&gt;About half an hour of hacking and documentation-searching resulted in the 'laundry' command, along with a better understanding of bash's numeric 'for' loops and math capabilities, among other things.&lt;br /&gt;&lt;br /&gt;The 'laundry' command, as it currently exists, takes in a number of minutes as input and then does the following, in order:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;prints the current/start time and the amount of time input.&lt;br /&gt;&lt;li&gt;counts down the minutes, waiting as necessary and printing the remaining time along the way.&lt;br /&gt;&lt;li&gt;prints the end time.&lt;br /&gt;&lt;li&gt;over the computer's audio output, it says the word, "Laundry".  This is repeated every ten seconds until Ctrl-C is pressed.&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;For example, given my building's dryers run time of about an hour, I can run the following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;laundry 60&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is roughly what I would see in the terminal (using a smaller wait time of five minutes):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Start Time: Fri Sep  3 20:33:53 EDT 2010&lt;br /&gt;Waiting for 5 minutes (300 seconds).&lt;br /&gt;Press Ctrl-C to exit.&lt;br /&gt;4 minutes left&lt;br /&gt;3 minutes left&lt;br /&gt;2 minutes left&lt;br /&gt;1 minutes left&lt;br /&gt;Done!&lt;br /&gt;End Time: Fri Sep  3 20:33:53 EDT 2010&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The complete code is posted below.  You can also &lt;a href="http://alum.wpi.edu/~davidl/laundry"&gt;download it here&lt;/a&gt; (use a right-click to save the file).  To install it, be sure to mark it as an executable program (via '&lt;b&gt;chmod +x ~/Downloads/laundry&lt;/b&gt;', assuming it's in the common, MacOS X 'Downloads' folder), and also to copy it somewhere in your PATH, such as /usr/local/bin ('&lt;b&gt;sudo mv ~/Downloads/laundry /usr/local/bin&lt;/b&gt;').  To note, the last step is purely optional.  Not doing so just means you'll have to type in a longer command to run it.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;#&lt;br /&gt;# Super-Simple Laundry Timer&lt;br /&gt;# by David Ludwig  &lt;dludwig -at- pobox.com&gt;&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;if [ "$1" == "" ]; then&lt;br /&gt; echo&lt;br /&gt; echo "Usage:"&lt;br /&gt; echo "    laundry &amp;#60time in minutes&amp;#62"&lt;br /&gt; echo&lt;br /&gt; exit 0&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;MINUTES=$1&lt;br /&gt;SECONDS=$[$MINUTES * 60]&lt;br /&gt;START_TIME=`date`&lt;br /&gt;&lt;br /&gt;echo "Start Time: $START_TIME"&lt;br /&gt;echo "Waiting for $MINUTES minutes ($SECONDS seconds)."&lt;br /&gt;echo "Press Ctrl-C to exit."&lt;br /&gt;&lt;br /&gt;for (( i=1; i&lt;=$MINUTES; i++ )); do&lt;br /&gt; sleep 60&lt;br /&gt; MINUTES_LEFT=$[MINUTES - $i]&lt;br /&gt; if [ $MINUTES_LEFT -ne 0 ]; then&lt;br /&gt;  echo "$MINUTES_LEFT minutes left"&lt;br /&gt; fi&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;END_TIME=`date`&lt;br /&gt;echo "Done!"&lt;br /&gt;echo "End Time: $END_TIME"&lt;br /&gt;&lt;br /&gt;while true; do&lt;br /&gt; say Laundry&lt;br /&gt; sleep 10&lt;br /&gt;done&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-2415466614446196246?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/2415466614446196246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=2415466614446196246' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/2415466614446196246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/2415466614446196246'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2010/09/shell-scripting-for-macos-x-laundry.html' title='Shell Scripting for MacOS X: Laundry Timer with Text To Speech Synthesis'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-4995668501366588284</id><published>2010-04-28T10:48:00.001-04:00</published><updated>2010-04-28T11:45:01.832-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='game jam'/><category scheme='http://www.blogger.com/atom/ns#' term='camera solitaire pong'/><category scheme='http://www.blogger.com/atom/ns#' term='dinojam'/><title type='text'>Camera Solitaire Pong</title><content type='html'>Last weekend I attended a small game jam co-run by a friend of mine, &lt;a href="http://www.artyponderer.com/"&gt;Darren Torpey&lt;/a&gt;.  The scene was very laid back, and the weekend was fun.  I ended up playing around with the &lt;a href="http://www.openframeworks.cc/"&gt;openFrameworks&lt;/a&gt; C++ toolkit, a multimedia framework of which I had seen a presentation about it a week before.  The feature set looked nice, and it was reported to be very easy to use.  It had a lot of computer vision features built in, which seemed interesting and was something I hadn't worked with before.  I decided to try my hand at writing a pong app using the camera on my laptop.  "Camera Solitaire Pong" is the result.&lt;br /&gt;&lt;br /&gt;The game is a heavily simplified version of 3rd person 3d pong, whereby the player views tge game world behind their paddle.  The world is represented by a boxy corridor.  Normally there'd be another paddle at the other end, however I ended up cutting that feature due to time constraints.  Instead, the player's goal is to hit a ball of increasing velocity as many times as possible.&lt;br /&gt;&lt;br /&gt;Control of the paddle is done through a video camera.  The app will attempt to track an object of a player-specified color.  Tennis balls work ok, as do many single color objects of similar size.  Ultimately I found that a piece of colored duct tape on the hand worked best, and had a good feel (IMO).&lt;br /&gt;&lt;br /&gt;The game consists of two screens.  The first is a calibration screen, whereby the player clicks on the object they wish to use.  Pressing the spacebar brings the player to the second screen, the game screen.&lt;br /&gt;&lt;br /&gt;A Mac build is available at: &lt;a href="http://alum.wpi.edu/~davidl/Camera_Solitaire_Pong/latest_mac_build"&gt;http://alum.wpi.edu/~davidl/Camera_Solitaire_Pong/latest_mac_build&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If I get around to it, I'll try porting to Windows.  The only Mac specific code in the game involves loading and saving a few variables, such as the calibrated color.  I may also try and add a few features to it.  I've already tweaked a few settings since the game jam, and added a title and some basic credits.&lt;br /&gt;&lt;br /&gt;Here are some screenshots.  Clicking on them should bring up larger versions.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://alum.wpi.edu/~davidl/Camera_Solitaire_Pong/Camera_Solitaire_Pong_1.png"&gt;&lt;img src="http://alum.wpi.edu/~davidl/Camera_Solitaire_Pong/Camera_Solitaire_Pong_1_small.png" alt="Calibration Screen"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://alum.wpi.edu/~davidl/Camera_Solitaire_Pong/Camera_Solitaire_Pong_2.png"&gt;&lt;img src="http://alum.wpi.edu/~davidl/Camera_Solitaire_Pong/Camera_Solitaire_Pong_2_small.png" alt="Game Screen"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A big thanks goes out to Laurence Lee, game jam attendee and Berklee College of Music student, for creating several nice sound effects for the game using one of the tennis balls I brought.  Special thanks also goes out to &lt;a href="http://geekfood.blogspot.com/"&gt;Vickie Wu&lt;/a&gt; for making tasty food during the event, and to everyone involved in running things or otherwise making for what was a fun weekend!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-4995668501366588284?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/4995668501366588284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=4995668501366588284' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/4995668501366588284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/4995668501366588284'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2010/04/camera-solitaire-pong.html' title='Camera Solitaire Pong'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-5924566659709399944</id><published>2009-05-24T10:07:00.000-04:00</published><updated>2009-05-25T09:55:28.081-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='falling stuff'/><title type='text'>Falling Stuff 1.0b3, With Windows Support!</title><content type='html'>I just finished up a new beta verson of the Falling Stuff screensaver.  Here's a list of additions and changes:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;a Windows version is now available!  Windows XP or higher is required.  To note:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;an OpenGL compatible video card and drivers are recommended for performance reasons, but isn't explicitly necessary.  If you're unsure whether or not your computer supports this, just note that in this version of the screensaver, performance may be a bit slow.  It varies from computer to computer.  I have a few thoughts on how to go about addressing this, which I'm considering for future releases.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;the installer includes an option for the "Microsoft Visual C++ 2005 Redistributable".  This is a will install a set of shared libraries that help run apps written in Visual C++, namely this screensaver.  :-)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;for MacBook users, accelerometer-based gravity can now reverse accelerometer-based gravity along its X axis.  Some MacBooks were interpreting a tilt to the right as a tilt to the left, and vice-versa.  Enabling this option on these machines should cause gravity to go in the correct direction.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;fixed a bug whereby some fallen objects wouldn't move if accelerometer-based gravity was enabled, and the laptop was tilted in a new direction.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;prevented a bug in ball-dot drawing.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://alum.wpi.edu/~davidl/Falling_Stuff/latest_mac_build"&gt;Download Falling Stuff for Mac OS X&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;a href="http://alum.wpi.edu/~davidl/Falling_Stuff/latest_windows_build"&gt;Download Falling Stuff for Windows&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-5924566659709399944?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/5924566659709399944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=5924566659709399944' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/5924566659709399944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/5924566659709399944'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2009/05/falling-stuff-10b3-with-windows-support.html' title='Falling Stuff 1.0b3, With Windows Support!'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-6286552231721762588</id><published>2009-03-30T20:59:00.000-04:00</published><updated>2009-04-01T20:32:47.937-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='screensavers'/><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='falling stuff'/><category scheme='http://www.blogger.com/atom/ns#' term='coding projects'/><title type='text'>Falling Stuff 1.0b2</title><content type='html'>Last summer, during my annual two week vacation, I ended up starting work on a screensaver.  It was a remake of an old After Dark screensaver module called Marbles, whereby marbles would fall to the bottom of the screen, only to be met with a set of large pegs.  Using a bit of code I had written on a few lazy Sundays before, along with an excellent 2D Physics engine called &lt;a href="http://box2d.org/"&gt;Box2D&lt;/a&gt;, I was able to get a reasonable simulation up and running.  It wasn't quite distributable, due to some occasional crashes, some performance issues, etc., so I never released it.  Once my vacation ended, development on it slowed way down.&lt;br /&gt;&lt;br /&gt;I recently spent a few days finishing up my screensaver project and now have something to show for.  I've called it "Falling Stuff", for lack of a better name.  For now, it is for MacOS X only, and only for Intel-based Macs at that, although I do have a Windows version pending (which needs polish, among other things).  Also note, I have only tested this on OS X 10.5.  In theory, it should run on 10.4 though.&lt;br /&gt;&lt;br /&gt;The initial release of Falling Stuff, 1.0b2 (beta 1 was only distributed to a few friends) sports the following features:&lt;br /&gt;&lt;br /&gt;* Pegs of two shapes&lt;br /&gt;* Marbles of two shapes&lt;br /&gt;* Hot falling action!&lt;br /&gt;* Accelerometer-based gravity for select laptops (most MacBooks, I believe)&lt;br /&gt;&lt;br /&gt;Ok, perhaps not much as of yet.  :-)  I have been thinking of adding some new features, possibly an interactive mode of some sort.&lt;br /&gt;&lt;br /&gt;Anyways, here is a quick screenshot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://alum.wpi.edu/~davidl/Falling_Stuff/screenshots/Falling_Stuff_Shot1_big.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 297px;" src="http://alum.wpi.edu/~davidl/Falling_Stuff/screenshots/Falling_Stuff_Shot1_small.png" border="0" alt="Falling Stuff 1.0b2 Screenshot" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://alum.wpi.edu/%7Edavidl/Falling_Stuff/Falling_Stuff_latest_OSX.zip"&gt;Falling Stuff 1.0b2 is available for download&lt;/a&gt;.  If you have an Intel-based Mac, I'd love to hear what you think of it.  If you have a Windows-based machine, I hope to have the Windows version out soon, although I doubt accelerometer support will be available for such, unless I can get my hands on some decent code and/or libraries to handle this.&lt;br /&gt;&lt;br /&gt;To install, download and extract the zip file, then double click on the "Falling Stuff.saver" file.  This should launch System Preferences, which'll ask if you'd like to install it.  From there, you can either install it just for yourself, or for all users on the system.&lt;br /&gt;&lt;br /&gt;Also, a &lt;a href="http://alum.wpi.edu/%7Edavidl/Falling_Stuff/Falling_Stuff_about.html"&gt;readme/about file&lt;/a&gt; is available as well, which contains some info that wasn't covered in this post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-6286552231721762588?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/6286552231721762588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=6286552231721762588' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/6286552231721762588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/6286552231721762588'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2009/03/last-summer-during-my-annual-two-week.html' title='Falling Stuff 1.0b2'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-7143757791191962636</id><published>2008-12-07T15:19:00.000-05:00</published><updated>2008-12-21T21:19:45.375-05:00</updated><title type='text'>Mac OS X Debugging Adventures</title><content type='html'>For the past few months, I've been spending some of my free time working on a cross-platform screensaver, one that runs under Windows and under Mac OS X. Getting the Windows version up and running was relatively easy.  A Windows screensaver is just an exe with a special extension (.scr) and some code to handle a few special command line parameters.  Having written Windows game code before helped there.  Getting the Mac OS X version running was quite a bit trickier, due in part to my inexperience with OS X.  I place some blame on OS X's screensaver engine though, which ended up being rather tricky to work with.  It deals with screen savers in a very different manner than Windows' approach.  OS X expects screensavers to be represented not as standalone applications, but as dynamically loadable modules, which can be loaded via one of a few different OS X-provided applications.&lt;br /&gt;&lt;br /&gt;Every OS X screensaver module must adhere to a certain set of guidelines.  Among them, they must be represented as an OS X bundle, they must provide a subclass of the OS-provided ScreenSaverView class, and they should play nice with other screensaver modules.  Sounds ok, except I found the implementation of these guidelines to be a bit tricky.  Why?&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;OS X screensavers are subject to control via an external main loop, which each screensaver hooks into (for initialization, shutdown, time-stepping, drawing, etc.)  This design seems ok in some ways: having no main loop to create reduces the amount of code needed for each screensaver to implement.  I could see ways in which this could be easier for the beginner.  In my case, there have been times that I've wanted to debug and profile portions of my screensaver logic using a main loop of my own, and without having to deal with the OS X screensaver engine.&lt;br /&gt;&lt;li&gt;All OS X screensaver modules get loaded into the same address space. Furthermore, they get loaded in such a way that no two modules can share the same symbol names. If two modules implement a function with the same name, there's a good chance one or both of them will crash, even if only one of the two modules is actively displaying a screensaver. One solution to this is to name functions such that they don't clash, such as by appending a unique name to each function. Another solution, the one I chose to work with, is to load almost everything in a second dynamically loaded module, which gets loaded in such a way as not to cause naming clashes (via dlopen with RTLD_LOCAL.)&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;For the times when I want to debug or profile my app without OS X's screensaver engine getting involved, I can switch to Windows and use that version.  I don't always want to switch to Windows though, so I created a small Mac app to help with debugging.  It loads the platform-independent portions of the screensaver code and drives them via its own main loop, avoiding the OS X screensaver engine altogether.  I recently ran into a problem with that approach though.  I created the app, ran it, confirmed that it worked, then hit a case where I wanted to step into the screensaver code.  When I tried to launch the app with a debugger attached, the app would immediately crash.  It's main function would never get called, and I'd be stuck with a debugger command prompt and the following error message:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;dyld: Library not loaded: @loader_path/../Frameworks/libBox2D.dylib&lt;br /&gt;Referenced from: /Users/davidl/Documents/Code/Platformer/trunk/MacOS/build/Debug/Lugnut_Native.so&lt;br /&gt;Reason: image not found&lt;br /&gt;Program received signal: “SIGTRAP”.&lt;br /&gt;Xcode: Introspection dylib not loaded because thread 1 has function: __dyld_dyld_fatal_error on stack&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;To note, Lugnut_Native.so is the current name of the shared library that contains most of my screensaver code, and libBox2D.dylib is another shared library that it depends on.  "Platformer" is the original name of the project, which started out life as a 2d platformer, and eventually evolved into a screensaver having nothing to do with 2d platformers.  Such is life.&lt;br /&gt;&lt;br /&gt;The error message listed above says that my screensaver library, Lugnut_Native.so, can't load one of its dependencies, libBox2D.dylib.  It's looking for it, and it can't find it.&lt;br /&gt;&lt;br /&gt;A bit of background info: "@loader_path" is a term that has special meaning to the Mac OS X dynamic linker. When one module tries to load another module, it can use the token, "@loader_path" to indicate that the module to be loaded is located relative to the location of the module doing the loading. In this case, the module Lugnut_Native.so was trying to load another module, libBox2D.dylib, and it was trying to load it from a location relative to itself.  Both modules were supposed to be located on my hard disk in locations predictably relative to each other.  This is where "@loader_path" came in.  It says that Lugnut_Native.so should expect that it's dependent library, libBox2D.dylib, in located spot relative to itself.  The OS X dynamic linker replaces "@loader_path", with the path of the directory that Lugnut_Native.so exists in.&lt;br /&gt;&lt;br /&gt;The problem ended up being that the wrong copy of Lugnut_Native.so was being loaded.  There were two copies of the file, both getting created in the app's XCode-driven build process.  The first was created by the linker.  This was the copy that was getting inadvertently loaded.  The second copy, the one I wanted to load, was a copy of the first placed inside the app's bundle, a location where OS X was supposed to be able to find it.  In some cases, OS X would find it.  If I ran the app outside of XCode, everything was ok.   When I ran it from within XCode with a debugger attached, it'd crash immediately.  Why would it do this?&lt;br /&gt;&lt;br /&gt;  The latter copy was the one I wanted to load.  It  existed inside the app's bundle.  The copy that was getting loaded wasn't.  When the OS X dynamic linker tried to load the incorrect copy, it was unable to find libBox2D.dylib in the specified location!&lt;br /&gt;&lt;br /&gt;The solution I used, and there may have been several, was to tell XCode that when it launched the app, the dynamic loader should try to load dynamic libraries from a specific location, namely the directory where the desired copy of Lugnut_Native.so existed (inside the main application's bundle, to note.)  It did this by making sure an environment variable called DYLD_LIBRARY_PATH was set, and that it got set before the app launched.  DYLD_LIBRARY_PATH, when set, tells the OS X dynamic linker to load dynamic libraries from a given path.  By setting this variable to the location where the desired copy of Lugnut_Native.so was, the dynamic linker should load it, or so I hoped at the time.&lt;br /&gt;&lt;br /&gt;When the app crashed, it presented me with a command prompt, with which I was able to list the environment variables exposed to the app and to the dynamic linker.  The command, "show environment" (without the quotes), said that DYLD_LIBRARY_PATH was already set and that it pointed to the path with the incorrect copy of Lugnut_Native.so.  If there were a way to tell XCode to set DYLD_LIBRARY_PATH to something else, maybe I would be able to debug my app.&lt;br /&gt;&lt;br /&gt;As it turns out, there was a way to set DYLD_LIBRARY_PATH before the app ran, thus making sure that the correct copy of Lugnut_Native.so would load, and thus allowing me to debug my screensaver in the manner I was hoping for.  Here are the steps I took, minus most of the annoying missteps I ran into:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Under the "Executables" section of the XCode project, I clicked on the app to debug, then pressed Command-I to bring up its Info dialog.&lt;br /&gt;&lt;li&gt;Clicked on the "Arguments" tab of the dialog that came up.&lt;br /&gt;&lt;li&gt;In the section, "Variables to be set in the environment:" section, I clicked on the plus sign to add an entry.&lt;br /&gt;&lt;li&gt;In the new entry, I set the name to be DYLD_LIBRARY_PATH, and the value to "$SRCROOT/$CONFIGURATION_BUILD_DIR/$FRAMEWORKS_FOLDER_PATH", without the quotes.  The value here told the dynamic linker to try loading modules from the application's bundle first and foremost, which is where the correct copy of Lugnut_Native.so was to exist.  Furthermore, it gives the dynamic loader a full path name, rather than a relative one.  This turned out to be important.  When I tried setting DYLD_LIBRARY_PATH to just, "$CONFIGURATION_BUILD_DIR/$FRAMEWORKS_FOLDER_PATH", it didn't work, which is not what I was expecting. $CONFIGURATION_BUILD_DIR, when used elsewhere in XCode, usually resolves to a full path name.  Prefixing "$SRCROOT" to this value fixed it.&lt;br /&gt;&lt;li&gt;I closed the dialog and then launchd the app in the debugger (via XCode's "Run" menu.)  It worked!&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;From then on in, I've been able to debug my screensaver under OS X using a main loop of my own creation, which is a bit more flexible than trying to debug the screensaver via OS X's screensaver engine.  Listing the reasons why are beyond the scope of this blog posting, perhaps some other time I'll list them.  Time for a break.  :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-7143757791191962636?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/7143757791191962636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=7143757791191962636' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/7143757791191962636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/7143757791191962636'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2008/12/mac-os-x-debugging-adventures.html' title='Mac OS X Debugging Adventures'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-1039351220599093009</id><published>2008-06-20T18:20:00.001-04:00</published><updated>2008-06-20T18:36:14.069-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cambridge'/><category scheme='http://www.blogger.com/atom/ns#' term='boston'/><category scheme='http://www.blogger.com/atom/ns#' term='wifi'/><category scheme='http://www.blogger.com/atom/ns#' term='harvard square'/><title type='text'>Harvard Square WiFi</title><content type='html'>&lt;a href="http://www.harvardsquare.com/Home/Articles/Free-Public-Wi-fi-in-Harvard-Square.aspx"&gt;Free WiFi was recently installed in Harvard Square&lt;/a&gt;.  Earlier today, I tried getting access to it and had a moderate amount of luck.  The places I was able to get it working included:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;in the little park just outside the Peet's Coffee on Mt. Auburn and JFK.  The signal was ok there.&lt;br /&gt;&lt;li&gt;in the tea cafe adjacent to the Fire &amp; Ice.  The signal was rather spotty here; I was able to get a usable connection on one side of the cafe and not the other.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;The free wifi did not work inside the Starbucks, which does provide WiFi, although it's rather expensive.  &lt;a href="http://www.starbucks.com/aboutus/pressdesc.asp?id=827"&gt;It's supposed to get cheaper at some point soon&lt;/a&gt;.  According to one Starbucks employee I talked to, 'maybe by September'.  My fingers are crossed.  I enjoy changing up where I work and am fortunate enough to be able to do so.  Mixing the pervasiveness of Starbucks with reasonably-priced WiFi spots sounds good to me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-1039351220599093009?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/1039351220599093009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=1039351220599093009' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/1039351220599093009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/1039351220599093009'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2008/06/harvard-square-wifi.html' title='Harvard Square WiFi'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-8581057403816453093</id><published>2008-03-24T14:41:00.000-04:00</published><updated>2008-03-27T18:19:46.134-04:00</updated><title type='text'>Building Visual C++ Apps on the Command Line</title><content type='html'>I recently started spending some time working on my laptop; in coffee shops, libraries, etc.  Much of my work involves working in C++, which means that I've gotta spend time compiling.  Unfortunately, my laptop is old.  Running Visual C++ on this machine, which I need for much of my work, is like putting it on a treadmill turned up to high.  It's ok for a while, but gets tiring awfully fast.  Visual C++ on my desktop machine isn't a problem.  It's got gobs of memory and a nice dual core CPU.  A few days away from it has made me realize just how spoiled I've become by it.&lt;br /&gt;&lt;br /&gt;Fortunately, Visual C++ can do builds on the command line.  Editing can be done in a less memory intensive application, which in my case, means that my laptop won't have to use the hard disk when it runs out of memory, something that happens all too quick these days.&lt;br /&gt;&lt;br /&gt;Here's how to do it, or rather, here's at least one way to do it:&lt;br /&gt;&lt;br /&gt;First, a command prompt needs to be set up for use with the Visual C++ toolset.  There are two ways to get this running:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Launch a command prompt and run the batch file, vcvarsall.bat.  On my laptop, this is installed to C:\Program Files\Microsoft Visual Studio 8\VC\.  I installed Visual C++ 2005 to the default location.  If you've got this installed, it's probably in there too.&lt;br /&gt;&lt;li&gt;Open the "Visual Studio 2005 Command Prompt" shortcut that the Visual C++ 2005 installer creates.  It's in the, "Visual Studio Tools" folder.&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Once you've got a command prompt window open, CD into the directory where your .sln file exists.  From there, to build all configurations (Debug, Release etc.), type in the following command:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;vcbuild TheApp.sln&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;If you'd like to build just one project configuration, perhaps "Debug", then type in the following:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;vcbuild TheApp.sln Debug&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;That's it!  Nice and simple, no IDE required.  Of course, you'll lose out on things like a debugger, or the ability to point and click your way to build management, however there are ways to do those outside of the IDE.  In my case, I figure I can wait to do those when I'm at my nice and fast desktop machine, or I can just run the full Visual Studio IDE on my laptop every once in a while.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; More information can be found on VCBUILD here:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/hw9dzw3c(VS.80).aspx"&gt;VCBUILD for MSVC 2005&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/hw9dzw3c.aspx"&gt;VCBUILD for MSVC 2008&lt;/a&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update #2:&lt;/b&gt; Turns out VCBUILD has a problem regarding dependencies.  If one use Visual Studio's Configuration Manager to set up a linker dependency for a C++ project, VCBUILD won't use that information.  It'll build the projects, but will not build the projects in the correct order, nor will it pass the correct information to the linker .  One workaround is to use DEVENV.EXE, which serves both as the exe for the full IDE, and as a way to build projects at a command prompt.  It's a bit different than VCBUILD, and I didn't notice any way to build all configurations in a .sln, but it can be utilized to build individual ones.  For example, to build the configuration, "Debug", the following can be used:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;devenv.exe TheApp.sln /Build Debug&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;To note, this will not launch the full IDE; it will build the app, use the current console window for logging, and then exit,  just like VCBUILD.  No GUI will be shown.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-8581057403816453093?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/8581057403816453093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=8581057403816453093' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/8581057403816453093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/8581057403816453093'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2008/03/building-visual-c-apps-on-command-line.html' title='Building Visual C++ Apps on the Command Line'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-1564477047816166973</id><published>2007-06-23T01:01:00.001-04:00</published><updated>2007-06-23T01:29:56.415-04:00</updated><title type='text'>OLPC Game</title><content type='html'>A few weeks ago, I was fortunate enough to be able to go to a &lt;a href="http://wiki.laptop.org/go/GameJam_BostonJune2007"&gt;game jam&lt;/a&gt; run by some &lt;a href="http://en.wikipedia.org/wiki/Olpc"&gt;One Laptop Per Child (OLPC)&lt;/a&gt; folks.  The idea of this event was to develop a game for the OLPC laptop in the span of a weekend.  My entry for the jam ended up writing an implementation of &lt;a href="http://wiki.laptop.org/go/Reversi"&gt;Reversi&lt;/a&gt;, which was a lot of fun to write.  Given that the OLPC laptops are designed for children, the judging of the games were done by children.  At one point during the judging, one of the children came up to me and handed me a slip of paper, which his mother explained was his vote for the best game.  Cool.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;i&gt;(I still want to write a good blood and guts game some day though, although I suspect the OLPC wouldn't be my target platform!)&lt;/i&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;The OLPC laptops, which are also called XOs, are neat.  They have a built in camera, plus a screen that can be swivelled around, turning the machine into a tablet-mode of sorts.  There are Playstation-esque controls on either side of the screen, which complemented the machine nicely, although I do not believe they are working in the game toolkit of choice for the XOs (&lt;a href="http://www.pygame.org"&gt;Pygame&lt;/a&gt;).  The screens also have a low-power, sunlight-friendly grayscale mode, which I think Reversi will work well in.  I'll likely need to do some optimization on the game before it works well in low-poer mode.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;The best part of attending this game jam was that it allowed me to develop a game that I normally wouldn't have.  Almost all of my programming time these days goes into work, which I don't necessarily see as a bad thing, but it is occasionally nice to be able to work on something with a different set of goals and limitations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-1564477047816166973?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/1564477047816166973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=1564477047816166973' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/1564477047816166973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/1564477047816166973'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2007/06/miscellaneous.html' title='OLPC Game'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-116777145900374140</id><published>2007-01-02T15:25:00.000-05:00</published><updated>2007-01-02T15:57:39.076-05:00</updated><title type='text'>Grrrrrrrrr</title><content type='html'>New Year's Resolution #3: Don't lose phone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-116777145900374140?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/116777145900374140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=116777145900374140' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/116777145900374140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/116777145900374140'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2007/01/grrrrrrrrr.html' title='Grrrrrrrrr'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-116775182491612007</id><published>2007-01-02T10:02:00.000-05:00</published><updated>2007-01-02T10:30:25.353-05:00</updated><title type='text'>New Years Resolutions, 2007 Edition</title><content type='html'>I both hate and love New Year Resolutions.  On one hand, they are often overinflated promises that tend to get broken.  On the other hand, they serve as a point of self-improvement (or self-destruction, for the masochists.)&lt;br /&gt;&lt;br /&gt;For 2007, I have one and only one resolution, which is to work out more.  Biking reemerged as an interest of mine in the summer of 2006 and while it was reasonably fun, I don't enjoy it so much that I want it to be my only source of exercise.  (No offense, I hope, to the local ski mafia.  You all get far more exercise than I.)  A gym club membership has been established (my wallet scream-eth), with my first order of business being to continue the anti-&lt;a href="http://en.wikipedia.org/wiki/Repetitive_strain_injury"&gt;RSI&lt;/a&gt; exercises I was given by a &lt;a href="http://www.sportsandpt.com/"&gt;local group of physical therapists&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Installing and maintaining a Linux-based workstation is under consideration as my second resolution.  Work's been progressively turning me into a Windows weenie, to the point that Vista is starting to look somewhat appealing.  In the grand scheme of things, this really isn't that important, however Ubuntu is starting to look nicer by the minute.  If one of the various x86 virtualization products were to support GPU virtualization, at least so far as to allow me to run Direct3D apps in a virtualized environment, then these Linux-based workstation plans may be set, unless I go Mac.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-116775182491612007?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/116775182491612007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=116775182491612007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/116775182491612007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/116775182491612007'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2007/01/new-years-resolutions-2007-edition.html' title='New Years Resolutions, 2007 Edition'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-116486285647365852</id><published>2006-11-29T22:59:00.000-05:00</published><updated>2006-11-30T00:00:56.786-05:00</updated><title type='text'>Windows MIDI Players and Tempo Control</title><content type='html'>Since it's late and I'd rather not disturb the roommates + landlord, I am practicing on an &lt;a href="http://www.deger.com/"&gt;electric bagpipe chanter.&lt;/a&gt;  &lt;br /&gt;&lt;br /&gt;I am on the lookout for a good midi player for Windows, something I can use to play along with MIDI versions of bagpipe tunes.  Since my playing is a bit slow, and the tunes I'm looking to play have a default tempo that's way out of my league, a player with some sort of speed control is pretty much a necessity.&lt;br /&gt;&lt;br /&gt;Here's what I've found this evening, in order:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.ngksoft.com/sp/index.html"&gt;Sigma Player 1.0&lt;/a&gt; - A simple freeware player supporting multiple audio formats.  The interface is a bit odd, sporting all black buttons and a close button that simply says, "Close".  Forgiveable, except that dragging and dropping a file onto it doesn't seem to do anything, and the "slow motion" feature that the website touted isn't variable.  It's either regular speed or slow-mo, and no in-between.  This is better than nothing, but not what I'm looking for.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.ronimusic.com/swmiplmac.htm"&gt;Sweet MIDI Player 2.2.6 for Windows&lt;/a&gt; - This one's better than Sigma Player, but still has shortcomings.  It's interface is structured like a sound board, with vertical sliders to adjust the volume of individual channels, as well as knobs to pan them to the left or right.  More importantly, it sports two text boxes to change tempo: one displays the tempo as a number (222.16, for example), and the other displays a percentage that the tempo can be adjusted by (whereby "-50%" will cut it in half.)  Personally, I'd prefer slider bars to text boxes (or both), but this worked out well enough for me to play along with the tune at a reasonable speed.  This proved to be an exercise in out-of-tune playing, and ended up sounding about as good as a chorus of belligerent whales.  I tried using the pause controls and the tempo setting to get the tune to stay on low-A for a good while, which I hoped would allow my chanter to be tuned to the computer's synthesizer, however pausing the tune in Sweet MIDI Player had the effect of muting the song and requiring it to be restarted from the beginning.  Argh.  Perhaps this has to do with the MIDI synthesizer it used, perhaps not.  Regardless, Simple MIDI Player is ok for now, but needs to be replaced.&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Oh well, I'm off to actually practice, and not just write about it.  More on this later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-116486285647365852?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/116486285647365852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=116486285647365852' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/116486285647365852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/116486285647365852'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2006/11/windows-midi-players-and-tempo-control.html' title='Windows MIDI Players and Tempo Control'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-115462455338042822</id><published>2006-08-03T13:02:00.000-04:00</published><updated>2006-08-03T13:02:59.033-04:00</updated><title type='text'>Dust Devils</title><content type='html'>&lt;a href="http://youtube.com/watch?v=2rK-ctpFBz8&amp;search=tornado"&gt;When Dust Devils Attack!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-115462455338042822?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/115462455338042822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=115462455338042822' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/115462455338042822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/115462455338042822'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2006/08/dust-devils.html' title='Dust Devils'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-114852915474293092</id><published>2006-05-24T23:31:00.000-04:00</published><updated>2006-05-25T09:51:12.503-04:00</updated><title type='text'>Miscellaneous</title><content type='html'>I've started to play the bagpipes again, after a few-year lull.  Had the chanter stock fall off earlier today.  The rubber ring holding the chanter stock to the bag had disintegrated.  Me thinks I should've taken better care of it; too late now.  I think I'll give fixing it a try, but suspect that a new bag is in order.  Some net-searching turned up zipper-openable bags, which seems like it'd make for easy cleaning, as well as making it easier to find escapee drone reeds.&lt;br /&gt;&lt;br /&gt;Finished playing the &lt;a href="http://en.wikipedia.org/wiki/New_Super_Mario_Bros"&gt;New Super Mario Bros&lt;/a&gt; for the DS.  It's fun.  Nothing really new; the game is standard 2D Mario fare with elements from the 3D marios (wall jumping, double jumps).  Ground stomping is in there too.  Some of the new features are more novelty than anything.  There's a big mushroom, which'll make you as tall as about 1/2 the screen, however it's really only cool for a level or two.  The same can be said about the tiny-ifying mushroom.  Regardless, the game is fun and the level design is especially good.  I do wish the game could be played on a TV though, as this'd be a nice game to play with a few people.&lt;br /&gt;&lt;br /&gt;Am starting to take up archery.  I've gone to two archery shoots/practices run by a local club, &lt;a href="http://pscarmichael.home.comcast.net/archery/"&gt;The Carolingian Company of Bowmen&lt;/a&gt;, which is &lt;a href="http://www.sca.org"&gt;SCA&lt;/a&gt; based.  They've been lots of fun and I plan on going to more practices.  After the first shoot, the fingers on my right hand, the one I use to pull the string back, hurt quite a bit.  By the second shoot, I started using a glove.  That seems to have fixed that problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-114852915474293092?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/114852915474293092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=114852915474293092' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/114852915474293092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/114852915474293092'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2006/05/miscellaneous_24.html' title='Miscellaneous'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-114771905082159413</id><published>2006-05-15T14:25:00.000-04:00</published><updated>2006-05-15T15:05:31.696-04:00</updated><title type='text'>Miscellaneous</title><content type='html'>&lt;ul&gt;&lt;br /&gt;&lt;li&gt;It's still raining, and has been for the last week.  Boston's North Shore region got pounded, with some areas getting up to 18" of rain.  The house I live in (in the Metrowest area) has a small amount of water in the basement, but not much; no more than a quarter of an inch deep, and only in one spot.  That spot happens to be under part of the server table though.  It doesn't appear to be growing though, which is good.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;I just got &lt;a href="http://www.purplemotion.net"&gt;Purple Motion&lt;/a&gt;'s new CD in the mail.  It's very good.  If you liked demoscene-type stuff, it's a good buy.  (Purple Motion wrote music for Future Crew, who did the PC/DOS demo, Second Reality.)  Included on his CD are some new stuff and some remixes of old stuff, including a remix of his contribution to &lt;a href="http://www.modarchive.com/cgi-bin/download.cgi/1_9/2ND_PM.S3M"&gt;Second Reality&lt;/a&gt;.  It's very good, although I prefer the original version.  The remix of &lt;a href="http://www.modarchive.com/cgi-bin/download.cgi/S/strshine.s3m"&gt;Starshine &lt;/a&gt; is awesome though.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;The &lt;a href="http://en.wikipedia.org/wiki/New_Super_Mario_Bros"&gt;New Super Mario Bros&lt;/a&gt; comes out today [for the DS].  A local EB Games didn't have it, and won't until tomorrow.  Grrr.&lt;br /&gt;&lt;br /&gt;Another new Mario Bros game, &lt;a href="http://en.wikipedia.org/wiki/Super_Mario_Galaxy"&gt;Super Mario Galaxy&lt;/a&gt;, might be a launch title for the &lt;a href="http://en.wikipedia.org/wiki/Wii"&gt;Nintendo Wii&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;A new beta of &lt;a href="http://www.itrango.com/vslua/"&gt;VSLua&lt;/a&gt; was released recently.  VSLua allows Lua code to be debugged from within Visual Studio.  This is the first version to support the use of custom Lua dlls, something the previous beta did not have, and a requirement for the code I work on.  (I use &lt;a href="http://www.luaplus.org"&gt;LuaPlus&lt;/a&gt;, a C++ interface to the C-based Lua API.)&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-114771905082159413?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/114771905082159413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=114771905082159413' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/114771905082159413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/114771905082159413'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2006/05/miscellaneous.html' title='Miscellaneous'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-114339123966848884</id><published>2006-03-26T11:07:00.000-05:00</published><updated>2006-03-27T18:54:35.793-05:00</updated><title type='text'>Post-GDC Notes</title><content type='html'>Last week, I had the opportunity to attend the &lt;a href="http://www.gdconf.com"&gt;Game Developer's Conference (GDC)&lt;/a&gt;.  This was my first professional conference, excluding a MacWorld expo I visited in the mid-late 90's, and was also my first time arranging my own travel plans (in regards to airline tickets, hotel reservations, etc.)  Here are my notes, roughly in the order I could think them up:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;The Lua roundtable on Thursday was excellent.  There was a wide range of people there, from console developers looking to shrink the Lua runtime down to well under 100k, to those who were just curious about what Lua was.  Some had modified the language and runtime itself (supposedly, it's fairly easy), others had connected Lua to C/C++ in a myriad of ways (either using custom bindings, or SWIG.)&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Microsoft seems to have good momentum in regards to XBox Live Arcade.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Some of the conference rooms were way too small.  Room A1, you suck.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;The &lt;a href="http://mingle.minnamedia.com/"&gt;Minna Mingle&lt;/a&gt; party was a lot of fun.  The company I work for, &lt;a href="http://www.funkitron.com"&gt;Funkitron&lt;/a&gt; (who paid for the trip, thanks again &lt;a href="http://funkitron.com/blog/index.php"&gt;Dave&lt;/a&gt;!), had a table there.  It was in a weird spot though, on top of a stage in a reasonable-sized auditorium.  Well, not quite an auditorium, more like a fancy restaurant from the 20's.  The type where gangsters might hang out.  Anyhoo, the table's spot seemed to scare people off.  Some sort of stage fright thing I suppose.  That and it was somewhat separate from the other tables.  The party did gave me some time to hang around with &lt;a href="http://tinysubversions.blogspot.com/"&gt;Darius Kazemi&lt;/a&gt;, who I hope was able to get some good rest over the weekend.  Oh, and to whomever brought the copy of Blokus (I think it was Garage Games), you rule.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;The Shockwave party was cool too.  Got to play some Poker for a bit, which isn't my strongest suit.  Thanks to Ion Hardie from Reflexive for giving me a few extra poker chips.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;The burrito place near the Santa Clara hotel is awesome.  Props to Slingo's Mike Sweeney for recommending it.  I wish I remembered the name of it though.  They had some of the best burrito sauce I've ever tasted.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Losing my cellphone sucked.  I think that a better system of pants pockets and/or a belt clip of some sort will fix this next time around.  To note, 1-800-CALL-ATT allows calls to be placed from pay phones using major credit cards.  1-800-COLLECT also works, but they don't accept Mastercard (1-800-CALL-ATT does.)&lt;br /&gt;&lt;br /&gt;&lt;li&gt;The keynote from Nintendo president Satoru Iwata was sweet.  Every attendee got a pre-release copy of the new DS game, Brain Age.  The new, 2D-styled, Zelda-for-DS game they're working on looks to be good.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;The new Super Mario Bros game for DS looks nice, although I wish I'd spent more time playing around with it at the booth.  Speaking of which, Nintendo's booth was sweet.  Most booths were just a few guys sitting around demoing a product, which was helpful in a lot of cases.  Nintendo's was the most fun though, and consisted of nothing but DS after DS, all of which were the new "Lite" models.  Sony's booth was alright, and they had a lot of PSPs there.  It never seemed as crowded as the Nintendo booth though, although that could just be the fanboy in me filtering out information.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;In terms of luggage, pack light!  Or pack an extra piece of luggage.  I ended up running out of space and had to toss some of my conference swag (various magazines and t-shirts had to get sacrificed to the hotel trashcan gods.)  In retrospect, I probably should've just gone out and bought a cheap duffle-bag right then and there.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;If you're gonna stow away luggage at the conference center, do it early in the day, especially if its the last day of the conference.  I was lucky enough to get there when there was still room to do so, but they ran out of space shortly afterwards (at 10:30, according to one of the attendants.)&lt;br /&gt;&lt;br /&gt;&lt;li&gt;When calling a cab, if they take your name, don't expect them to wait around very long for you, if at all.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Sugared cola, bad; coffee, better; water, best.  Furthermore, if you're used to one source of caffiene (in my case, coffee), don't switch to another while at a conference.  Relearning how tired sugared cola makes me really wasn't one of the things I wanted to get out of the conference, but it was.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;The Will Wright talk was well done and interesting, although not for everyone.  His talk came off like that of a college professor, specifically the excitable and bright, but absent-minded type.  For the WPI people here, it was a bit like listening to Mike Ciaraldi talk, in that both seem to distribute information on a fast-paced and slightly random manner.  (I mean this in the best possible way, BTW.  It's the sort of ADD thing that makes TV shows like Robot Chicken really worthwhile.)  I don't think many suits stayed around for the whole talk though.  The crowd that left was decidedly more geeky looking than the crowd that came in.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Some Californians can't seem to take the cold.  For all week, it was in the 60's and was sunny.  I recall hearing one cellphone-using woman mention how cold it was.&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-114339123966848884?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/114339123966848884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=114339123966848884' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/114339123966848884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/114339123966848884'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2006/03/post-gdc-notes.html' title='Post-GDC Notes'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-114203433790331118</id><published>2006-03-10T18:37:00.000-05:00</published><updated>2006-03-10T18:47:08.483-05:00</updated><title type='text'>Gold!  Gold, I tell ya!</title><content type='html'>Feeling lavish?  Perhaps you'd like to be a little more lavish?  Maybe a &lt;a href="http://news.zdnet.co.uk/hardware/storage/0,39020366,39256683,00.htm"&gt;diamond-encrusted, gold-plated USB memory stick&lt;/a&gt; will take care of things.&lt;br /&gt;&lt;br /&gt;Perhaps that's not lavish enough for ya.  If that's the case, why not get a &lt;a href="http://www.voodoopc.com/promo.aspx?promoID=3"&gt;gold-plated PC&lt;/a&gt;?  Comes with a free t-shirt as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-114203433790331118?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/114203433790331118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=114203433790331118' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/114203433790331118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/114203433790331118'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2006/03/gold-gold-i-tell-ya.html' title='Gold!  Gold, I tell ya!'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-114184445297275447</id><published>2006-03-08T13:56:00.000-05:00</published><updated>2006-03-08T14:02:39.386-05:00</updated><title type='text'>Google Maps</title><content type='html'>Note to self, when using Google maps to find a location, always double check the final address.  Also be wary of abbreviations.  I learned both lessons earlier today.&lt;br /&gt;&lt;br /&gt;I really wanted to go &lt;a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;q=281+Massachusetts+Ave,+Arlington,+MA&amp;ll=42.409136,-71.148019&amp;spn=0.021578,0.054245"&gt;here&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;but ended up &lt;a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;q=281+Mass+Ave+02474&amp;ll=42.423805,-71.177588&amp;spn=0.021573,0.054245"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The correct address was "281 Massachusetts Ave 02474", not "281 Mass Ave 02474".  Both put me on the right street, but the the abbreviated one placed me a few miles down the road.  Argh!&lt;br /&gt;&lt;br /&gt;BTW, &lt;a href="http://www.lexeye.com/index.html"&gt;Lexington Eye Associates&lt;/a&gt;, which is where I headed to, have really nice eye doctors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-114184445297275447?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/114184445297275447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=114184445297275447' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/114184445297275447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/114184445297275447'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2006/03/google-maps.html' title='Google Maps'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-114133948348507806</id><published>2006-03-02T16:46:00.000-05:00</published><updated>2006-03-03T17:50:30.560-05:00</updated><title type='text'>DOS</title><content type='html'>Last weekend, I began scrapping together a DOS machine, the primry purpose of which would be to play games, run demos, and generally just feed my nostalgic senses.  You see, back in the day, I spent a lot of time working in DOS.  My first computer, an &lt;a href="http://mail.magnaspeed.net/%7Embbrutman/PCjr/pcjr.html"&gt;IBM PCjr&lt;/a&gt;, ran some variant of IBM DOS.  I don't remember the tech specs of it very well, and I'd have a heck of a time trying to figure out what made IBM DOS different than other DOS'es, but i do remember having to swap out floppy disks... a lot. [1]  Boot the system, put in a floppy.  Run a program, put in another floppy.  Go back to DOS from some application, put the DOS floppy back in.  That was, of course, assuming that the program could exit back into DOS, and didn't require a reboot.&lt;br /&gt;&lt;br /&gt;So come last Saturday, I eyed an old system sitting under my TV table and said, hmmmm, why not get it running.  Components ended up getting scrapped together from various sources (Kevin, thanks again for the sound card!)  Certain, nameless websites provided me with MS-DOS 6.22 installation floppies, which after being written to old OS/2 install floppies (which I have on CD as well, that's a project for another day though), proceeded to get installed on the target system.  After quickly remembering how little fun installing software via floppies was, I proceeded to get a network card up and running.  The initial plan was to get TCP/IP up and running under pure DOS.  That failed. [2]  Instead, I ended up installing Windows for Workgroups 3.11.&lt;br /&gt;&lt;br /&gt;Ugh.  Windows?!  On a modern DOS machine?  I suppose I could've copied files over a serial cable, which might've been cooler (or should I say, more l33+ h@X0R  &lt;grin&gt;), but fuck it.  Windows 3.11 was just as much a part of the computing experience back then as was DOS.  Plus, that meant I got to install &lt;a href="http://en.wikipedia.org/wiki/After_Dark"&gt;After Dark&lt;/a&gt;, an awesome set of screensavers that I really wish were offered on modern Windows systems.  (The last released version runs under Win98, but not 2000 or XP.)&lt;br /&gt;&lt;br /&gt;So now I was up and running!  I could copy files over via FTP [4].  &lt;a href="http://www.classicgaming.com/scorch/"&gt;Scorched Earth&lt;/a&gt; was installed in a prompt fasion, as well as &lt;a href="http://www.mobygames.com/game/dos/pinball-fantasies"&gt;Pinball Fantasies&lt;/a&gt;, &lt;a href="http://www.mobygames.com/game/dos/prince-of-persia"&gt;Prince of Persia&lt;/a&gt;, &lt;a href="http://www.carrsoft.com/ctf/capture1.html"&gt;Capture The Flag&lt;/a&gt;, &lt;a href="http://www.mobygames.com/game/dos/stunts"&gt;Stunts&lt;/a&gt;, and a few others.  Some DOS demos made there way onto the machine as well.  &lt;a href="http://en.wikipedia.org/wiki/Second_reality"&gt;Second Reality&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Crystal_Dream_2"&gt;Crystal Dream II&lt;/a&gt; among them.&lt;br /&gt;&lt;br /&gt;So what's the point here?  I could've just run a lot of these games under &lt;a href="http://dosbox.sourceforge.net"&gt;DOSBox&lt;/a&gt;, which is a really nice cross-platform x86 + DOS emulator.  Why the need for a dedicated DOS machine:&lt;br /&gt;&lt;br /&gt;&lt;/grin&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;it's more compatible than DOSBox.  Or VMWare + DOS for that matter, both of which I tried in the past.  These setups are alright, except there'd always be a few apps that never worked quite right.  DOSBox had a few incompatibilities, VMWare + DOS had performance issues, even on a fast machine.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;it's fun.  I'm beginning to understand why some people stick with certain computer platforms long after their respective manufacturers stop supporting them.  Amiga users fall into this category.  Heck, back in high school, the local Mac user group doubled as an Apple II user group.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;[1] The IBM PCjr had two cartridge slots, in addition to the floppy drive.  Some of the cartrides I had were very very cool, and given that I only had a small handful of them, they got used very extensively.  &lt;a href="http://www.mobygames.com/game/crossfire/screenshots"&gt;Crossfire &lt;/a&gt; and &lt;a href="http://www.mobygames.com/game/pc-booter/mine-shaft"&gt;Mineshaft &lt;/a&gt; particularly come to mind.&lt;br /&gt;&lt;br /&gt;[2] While trying to get networking up and running in pure DOS, I did encounter DOS implementations of the SSH 1 and 2 clients, which can be found at &lt;a href="http://sshdos.sourceforge.net/"&gt;http://sshdos.sourceforge.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[3] I could've installed Windows 95 or 98 instead, in which case I would've had a more recent update to MS-DOS, and've had some level of compatibility with Win32 apps, but where's the fun in that?&lt;br /&gt;&lt;br /&gt;[4] I think that at times, we take for granted how easily one can get onto the Internet.  All modern operating systems support this right out of the box, and almost always include a wide range of tools to interact with other machines.  Windows for Workgroups did not include Internet support at all, at least not when it was initially released.  It could connect to  various types of Local Area Networks, including a now primitive version of SMB/CIFS (updated versions of this are the default filesharing option in modern Windows.)  Internet support was available in separate downloads, however, such as Trumpet Winsock and a Microsoft TCP/IP 32.  For the DOS box I just set up, I used the latter.  The tools it includes are limited to FTP, Telnet, ping and traceroute (there might be others, but only the first two are advertised as available.)  I find it kinda weird that these tools are still perfectly useable on modern systems, even though the software I'm using is over 10 years old.  Anyways, if you ever need a dead simple FTP server for Windows, &lt;a href="http://www.sentex.net/%7Emwandel/ftpdmin/index.html"&gt;ftpdmin&lt;/a&gt; might just do the trick.  It's a command line program, but its syntax is simple.  The following command runs the server and disables write access: "ftpdmin -g &lt;directory to="" share="" that="" s="" it=""&gt;&lt;/directory&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-114133948348507806?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/114133948348507806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=114133948348507806' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/114133948348507806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/114133948348507806'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2006/03/dos.html' title='DOS'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-114063144643186575</id><published>2006-02-22T13:01:00.000-05:00</published><updated>2006-02-22T20:52:01.373-05:00</updated><title type='text'>del.icio.us</title><content type='html'>I just got myself a del.icio.us account.  If you haven't seen this site, it tracks bookmarks via tags.  My page there can be viewed at &lt;a href="http://del.icio.us/dll"&gt;http://del.icio.us/dll&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-114063144643186575?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/114063144643186575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=114063144643186575' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/114063144643186575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/114063144643186575'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2006/02/delicious.html' title='del.icio.us'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-114019155835227217</id><published>2006-02-17T10:37:00.000-05:00</published><updated>2006-02-23T00:03:50.286-05:00</updated><title type='text'>Immortal Pongbat</title><content type='html'>Last night, I released a new version of &lt;a href="http://pongbat.sourceforge.net"&gt;Immortal Pongbat&lt;/a&gt;, a game that a few friends of mine (Mark Aikens and Ben Lucas) and I worked on a few years ago.  It was two years since I did any work on it. and after a well-placed e-mail from someone in the Netherlands asking about its source code, I decided to go in and tidy things up a bit.  (Not that receiving an e-mail from the Netherlands was particularly important.  It could've just as well been from someone in Germany, Russia, Zimbabwe, Antarctica, Space, somewhere down the street, from Right Behind You!, etc.)&lt;br /&gt;&lt;br /&gt;Anyhoo, if you're reading this, you should &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=64852&amp;package_id=62133"&gt;download it&lt;/a&gt;.  It's mega awesome, and undoubtedly has more mega awesomeness than that lame office toy that's probably sitting on your desk.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-114019155835227217?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/114019155835227217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=114019155835227217' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/114019155835227217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/114019155835227217'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2006/02/immortal-pongbat.html' title='Immortal Pongbat'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-113822480466341645</id><published>2006-01-25T16:29:00.000-05:00</published><updated>2006-01-25T16:33:31.320-05:00</updated><title type='text'>Laser-Guided Input</title><content type='html'>Got a mouse with a laser in it?  How about a &lt;a href="http://www.sforh.com/keyboards/virtual-keyboard.html"&gt;keyboard with a laser&lt;/a&gt;?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-113822480466341645?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/113822480466341645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=113822480466341645' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/113822480466341645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/113822480466341645'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2006/01/laser-guided-input.html' title='Laser-Guided Input'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-113709305487717177</id><published>2006-01-12T14:04:00.000-05:00</published><updated>2006-01-21T15:27:59.476-05:00</updated><title type='text'>Link Parade</title><content type='html'>&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.retrogamingradio.com/"&gt;RetroGaming Radio&lt;/a&gt; - A monthly radio program centered around older/classic video games.  Recent shows can be downloaded in mp3 format.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://video.google.com/videoplay?docid=515642196227308929&amp;q=russian+climbing"&gt;Russian Climbing&lt;/a&gt; - A short movie featuring some urban climbers performing some Matrix-esque moves in and around some abandoned buildings.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.doomsdayhq.com/"&gt;The Doomsday Engine&lt;/a&gt; - A heavily modified version of the Doom game engine, with support for Doom 1, Doom 2, Heretic, and Hexen.  Quake-style networking with mid-game joining appears to be supported, however I've yet to try this yet.  If that doesn't work, then there's always &lt;a href="http://www.zdaemon.org/"&gt;ZDaemon&lt;/a&gt;, which is another modified version of the Doom engine.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://fusoya.panicus.org/lm/"&gt;Lunar Magic&lt;/a&gt; - A WYSIWYG level editor for Super Mario World.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-113709305487717177?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/113709305487717177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=113709305487717177' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/113709305487717177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/113709305487717177'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2006/01/link-parade.html' title='Link Parade'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-113522150136412885</id><published>2005-12-21T21:20:00.000-05:00</published><updated>2005-12-21T22:18:21.423-05:00</updated><title type='text'>WikiWikiWeb</title><content type='html'>Long before &lt;a href="http://wikipedia.org"&gt;Wikipedia&lt;/a&gt; existed, there was the &lt;a href="http://c2.com/cgi/wiki?WelcomeVisitors"&gt;Portland Pattern Repository's Wiki&lt;/a&gt;, aka. the birthplace of the "wiki", aka. "C2".  It's content is still quite relevant, and when it comes to information on software development, it can't be beat.&lt;br /&gt;&lt;br /&gt;I've visited the C2 wiki before, but recently went back after reading through some Wikipedia articles on software development.  Here were some of my favorite finds:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://c2.com/cgi/wiki?SystemsAsLivingThings"&gt;Systems As Living Things&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://c2.com/cgi/wiki?PeopleProjectsAndPatterns"&gt;People Projects And Patterns&lt;/a&gt;, a good starting point for browsing.&lt;br /&gt;&lt;li&gt;&lt;a href="http://c2.com/cgi/wiki?AntiPatternsCatalog"&gt;Anti Patterns Catalog&lt;/a&gt;, which lists a variety of ways that software development projects can go wrong.&lt;br /&gt;&lt;li&gt;&lt;a href="http://c2.com/cgi/wiki?TruckNumber"&gt;Truck Number&lt;/a&gt; and &lt;a href="http://c2.com/cgi/wiki?TruckNumberFixed"&gt;Truck Number Fixed&lt;/a&gt;.  What if someone on a development project gets hit by a truck?  What if it were more than one person?&lt;br /&gt;&lt;li&gt;&lt;a href="http://c2.com/cgi/wiki?WikiPedia"&gt;WikiPedia&lt;/a&gt;: A C2 look at it's younger and bigger brother.&lt;br /&gt;&lt;li&gt;&lt;a href="http://c2.com/cgi/wiki?BeerOclock"&gt;Beer O'clock&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://c2.com/cgi/wiki?RandomPages"&gt;Random Pages&lt;/a&gt;, which according to the page, is an autogenerated list of random wiki links.  Reloading the page didn't seem to give a different set of links, nor was trying to load the page in a different browser (IE instead of Firefox.)  Perhaps it's on a timer, I don't know.  Regardless, the set of links I was presented with had some interesting content.&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-113522150136412885?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/113522150136412885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=113522150136412885' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/113522150136412885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/113522150136412885'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2005/12/wikiwikiweb.html' title='WikiWikiWeb'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-113310995322354504</id><published>2005-11-27T11:32:00.000-05:00</published><updated>2005-11-27T11:45:53.246-05:00</updated><title type='text'>Carpal Tunnel</title><content type='html'>Lately, the &lt;a href="http://en.wikipedia.org/wiki/Carpal_tunnel"&gt;carpal tunnel&lt;/a&gt; in my right arm has been flaring up.  My initial response was to ignore it, which wasn't the greatest option.  My new response has been to research it.  In this process, I found a cool freeware program called &lt;a href="http://www.workrave.org"&gt;Workrave&lt;/a&gt;.  It's a little applet that sits in my Windows taskbar and tells me to do things like, "take a microbreak", or "take a long break", which to my understanding, can help reduce &lt;a href="http://en.wikipedia.org/wiki/Carpal_tunnel_syndrome"&gt;Carpal Tunnel Syndrome&lt;/a&gt; by quite a bit in the long run.  The constant stream of breaks will take a bit of getting used to, given that I usually hate being interrupted when I'm coding and "in the zone", but I don't expect any problems with that.&lt;br /&gt;&lt;br /&gt;Now I just need a program that says, "make yourself a sandwich and eat damnit", every now and then, optionally with a "pretzels are not a meal" dialog box.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-113310995322354504?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/113310995322354504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=113310995322354504' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/113310995322354504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/113310995322354504'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2005/11/carpal-tunnel.html' title='Carpal Tunnel'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-113168082489920672</id><published>2005-11-10T22:06:00.000-05:00</published><updated>2005-11-10T22:48:26.376-05:00</updated><title type='text'>A Simple Fix</title><content type='html'>Turns out the problem I had with setting a window procedure before calling IDirectDraw7::SetDisplayMode had to do with the way the window procedure itself was formed.  Originally, I had it set up like this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;LRESULT Application::WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Once I inserted "CALLBACK" in between "LRESULT" and "Application", everything worked fine.  This is how it looks now:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;LRESULT CALLBACK Application::WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The surprising part was that the malformed window proc would work under Win98, however something about the call to IDirectDraw7::SetDisplayMode made it fail.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-113168082489920672?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/113168082489920672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=113168082489920672' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/113168082489920672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/113168082489920672'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2005/11/simple-fix.html' title='A Simple Fix'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-113157864469003373</id><published>2005-11-09T18:06:00.000-05:00</published><updated>2005-11-09T18:24:04.700-05:00</updated><title type='text'>Die, Win98, Die</title><content type='html'>Win98... has to die.  Really.  I realize there are people out there who like it, and still use it as a gaming platform.  You guys suck.  Writing good Windows API code is enough of a pain, writing good Windows 98 code is worse.  Case in point: IDirectDraw7::SetDisplayMode seems to like to crash on Win98 if a custom window procedure is set.  If the default window procedure (DefWindowProc) is set, it works fine, but try to set a custom wndproc and it dies, under Win98 at least.  Doesn't matter if that wndproc does nothing but call DefWindowProc.&lt;br /&gt;&lt;br /&gt;Now then, I'm sure there's a perfectly reasonable explanation for why this happens, except I'm lazy, and like things to Just Work(tm).  The more time I spend with Win98, the more happy I am to see its userbase shrink.  For the casual games market, however, it's probably years away from being dead enough to ignore.&lt;br /&gt;&lt;br /&gt;Anyways, if you like video game music, check out &lt;a href="http://www.osugamers.com/radio/"&gt;Radio GOSU&lt;/a&gt;, a good internet radio station which only plays video game music, mostly classic stuff too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-113157864469003373?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/113157864469003373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=113157864469003373' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/113157864469003373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/113157864469003373'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2005/11/die-win98-die.html' title='Die, Win98, Die'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-112493931992633663</id><published>2005-08-24T23:07:00.000-04:00</published><updated>2005-08-24T23:08:39.930-04:00</updated><title type='text'>The Coolest Forum Avatar I've Ever Seen</title><content type='html'>&lt;img src="http://www.lakitu.net/~davidl/blog_pics/wikis.gif"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-112493931992633663?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/112493931992633663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=112493931992633663' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/112493931992633663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/112493931992633663'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2005/08/coolest-forum-avatar-ive-ever-seen.html' title='The Coolest Forum Avatar I&apos;ve Ever Seen'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-112489107391851618</id><published>2005-08-24T09:38:00.000-04:00</published><updated>2005-08-24T09:57:09.263-04:00</updated><title type='text'>DOSBox</title><content type='html'>&lt;a href="http://dosbox.sourceforge.net/"&gt;DOSBox&lt;/a&gt; rules.  In particular, it's been letting me play &lt;a href="http://www.classicgaming.com/scorch/"&gt;Scorched Earth&lt;/a&gt; on my WinXP and Linux boxes.  DOSBox's video operations can be a bit slow, which becomes fairly evident after a large explosion goes off, but the game's very much playable.  Setup is a snap too.  It takes a minor amount of DOS knowledge to work one's way around, but very little at that.&lt;br /&gt;&lt;br /&gt;DOSBox is able to run &lt;a href="http://www.pouet.net/prod.php?which=63"&gt;Second Reality&lt;/a&gt; as well, a demo that continues to amaze me, especially considering that it ran at full framerate on a low end 486.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-112489107391851618?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/112489107391851618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=112489107391851618' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/112489107391851618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/112489107391851618'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2005/08/dosbox.html' title='DOSBox'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-112412494938419959</id><published>2005-08-15T12:50:00.000-04:00</published><updated>2005-08-15T13:05:06.506-04:00</updated><title type='text'>Multi Theft Auto</title><content type='html'>GTA San Andreas rules.  Multiplayer GTA-SA would be even better.  That's exactly what the people at &lt;a href="http://www.multitheftauto.com"&gt;Multi Theft Auto&lt;/a&gt; are working on.  It hasn't been released yet, however they did recently start &lt;a href="http://www.mtavc.com/blog/"&gt;a blog&lt;/a&gt; to chronicle their development efforts.&lt;br /&gt;&lt;br /&gt;The cool part about the upcoming MTA is that it'll be easily moddable by third parties.  A nice CTF mod would be nice... real nice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-112412494938419959?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/112412494938419959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=112412494938419959' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/112412494938419959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/112412494938419959'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2005/08/multi-theft-auto.html' title='Multi Theft Auto'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-112381679062389966</id><published>2005-08-11T22:38:00.000-04:00</published><updated>2005-08-11T23:20:11.613-04:00</updated><title type='text'>Book Report</title><content type='html'>Books I Read On My Summer Vacation&lt;br /&gt;by David Ludwig&lt;br /&gt;Homeroom Teacher: Hell if I remember&lt;br /&gt;&lt;br /&gt;My two week vacation is coming to an end.  I've been very good, and have prevented myself from doing any sort of coding, whether it be for work or on-the-side.  In it's place, I read a few books.  Not too too many, but a heck of a lot more than I usually do.  (My usual reading list consists of magazine articles and technical documentation.)  Anyhoo, here's what I've read:&lt;br /&gt;&lt;br /&gt;* The Lost World, by Michael Crichton.  A good read.  Not as good as its prequel, Jurrasic Park, but still very good.&lt;br /&gt;&lt;br /&gt;* Revolution in the Valley, by Andy Hertzfeld and others.  This book chronicled the development of the original Macintosh computer, and was compiled and written by members of its development team.  I've read a lot of books about Apple Computer and this one tops them all.&lt;br /&gt;&lt;br /&gt;* iCon, The Second Greatest Act In The History Of Business.  This was an unauthorized biography of Apple co-founder Steve Jobs.  What made this book particularly alluring was the response Jobs had to it's release, which was to pull all of the publisher's books from Apple's stores, which included all of the "For Dummies" series.  Not surprising, considering the sub-stellar portrait it displayed of him in the earlier portions of his life, and the seeming fact that Steve Jobs is nuts.  The book itself was alright, although I kept getting the feeling that it was rushed to the publisher, and could've used another draft.  I can't explain that any further.&lt;br /&gt;&lt;br /&gt;* (In Progress) Conspiracy Of Fools, but Kurt Eichenwald.  This book, recommended to me by my bos as well as my dad, chronicles the Enron bankruptcy.  It's a bit heavy on the finance-speak, but is otherwise alright.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In a few days, when my vacation ends, I think I'm going to try to keep up with the reading.  It's been a long time since I read on a recreational basis (tech manuals do NOT count) and I had almost forgotten how relaxing they could be.  I do think that more fiction will be in order, however.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-112381679062389966?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/112381679062389966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=112381679062389966' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/112381679062389966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/112381679062389966'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2005/08/book-report.html' title='Book Report'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-112180661936574853</id><published>2005-07-19T16:47:00.000-04:00</published><updated>2005-07-19T16:57:06.866-04:00</updated><title type='text'>NEGATIVE_ONE</title><content type='html'>I found the following while doing some work with &lt;a href="http://www.libsdl.org"&gt;SDL&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;if (sizes == (SDL_Rect **)NEGATIVE_ONE) {&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The variable 'sizes' was indeed -1, so the truth statement passed.  What got me was that someone actually took the time to define -1 as NEGATIVE_ONE.  I mean, if that can go through, why not NEGATIVE_TWO, NEGATIVE_THREE, or POSITIVE_FOUR_HUNDRED_AND_SEVEN?  A little further investigation revealed the following set of defines:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#ifdef macintosh /* MPW optimization bug? */&lt;br /&gt;#define NEGATIVE_ONE 0xFFFFFFFF&lt;br /&gt;#else&lt;br /&gt;#define NEGATIVE_ONE -1&lt;br /&gt;#endif&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;My conclusion, part 1: Perhaps I ought to moan less about the quality of my very modern compiler that understands -1.&lt;br /&gt;&lt;br /&gt;My conclusion, part 2: Computers are funny.  Not funny ha ha, but funny "hmmm".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-112180661936574853?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/112180661936574853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=112180661936574853' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/112180661936574853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/112180661936574853'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2005/07/negativeone.html' title='NEGATIVE_ONE'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-111844033671067233</id><published>2005-06-10T17:52:00.000-04:00</published><updated>2005-06-10T17:53:23.320-04:00</updated><title type='text'>Apple and Intel, Intel and Apple</title><content type='html'>&lt;P&gt;Earlier in the week, Apple announced that they were going to start making Macintoshes with Intel-branded x86 processors in them.&amp;nbsp; Adding to this is Intel's plan to support virtualization in a next-generation of CPUs.&amp;nbsp; My hope is that it means I could run the MacOS along side Windows on the same machine and both at native speeds, or slightly below that, but who's counting.&amp;nbsp; The whole situation reminds me of an ad I saw many years ago, which featured Apple's &lt;A href="http://lowendmac.com/quadra/q610dos.shtml"&gt;DOS Compatible Mac&lt;/A&gt;.&amp;nbsp; The idea was simple, take an in-production Mac, install an IBM-compatible on-a-card, and sell it as a package deal.&amp;nbsp; The ad featured a user switching back and forth between a Windows 3.x desktop and the MacOS.&amp;nbsp; Shortly thereafter I got a Power Mac 6100, which I happily used as my primary machine for about four years or so.&amp;nbsp; It was this ad that did it though.&amp;nbsp; In a small fit of nostalgia, I went searching for a copy of this ad.&amp;nbsp; I never did find it, but I did find a few other interesting Apple ads:&lt;/P&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt;&lt;LI&gt;&lt;A href="http://www.esm.psu.edu/Faculty/Gray/graphics/movies/snail.mov"&gt;A Pentium riding atop a snail&lt;/A&gt;&lt;/LI&gt;&lt;br /&gt;&lt;LI&gt;&lt;A href="http://www.esm.psu.edu/Faculty/Gray/graphics/movies/1984.mov"&gt;The 1984 ad&lt;/A&gt;, which was playing during the 1984 Superbowl&lt;/LI&gt;&lt;br /&gt;&lt;LI&gt;&lt;A href="http://www.esm.psu.edu/Faculty/Gray/graphics/movies/toasted.mov"&gt;"Toasted Bunny"&lt;/A&gt;, which centers around someone in an Intel-esque bunny suit catching on fire.&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;&lt;P&gt;NOTE: The above ads were compiled and hosted at: &lt;A href="http://www.esm.psu.edu/Faculty/Gray/movies.html"&gt;http://www.esm.psu.edu/Faculty/Gray/movies.html&lt;/A&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-111844033671067233?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/111844033671067233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=111844033671067233' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/111844033671067233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/111844033671067233'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2005/06/apple-and-intel-intel-and-apple.html' title='Apple and Intel, Intel and Apple'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-111826812368422284</id><published>2005-06-08T18:02:00.000-04:00</published><updated>2005-06-08T18:04:41.096-04:00</updated><title type='text'>Integrating Lua Into Visual Studio</title><content type='html'>&lt;P&gt;I do a lot of dual-language coding for work, most of which is in C++, but an increasing amount is in a scripting language called &lt;A href="http://www.lua.org"&gt;Lua&lt;/A&gt;.&amp;nbsp; It's a very nice language, with a highly flexible syntax and a small footprint (~200k on-disk for&amp;nbsp;the entire environment plus an&amp;nbsp;additional C++ interface.)&amp;nbsp; Using it is not without its drawbacks, particularly when it relates to writing C++ code in Visual Studio.&amp;nbsp; For example, the Visual Studio debugger cannot step-into or break inside-of Lua code.&amp;nbsp; Some Lua debuggers exist, such as the one provided in the&amp;nbsp;&lt;A href="http://www.luaplus.org"&gt;LuaPlus&lt;/A&gt; library, however I've yet to find one that provides a good and stable of a debugger as Visual Studio has.&amp;nbsp; Recently however, I found a V.S. add-on which supports syntax highlighting and auto-completion.&amp;nbsp; It's not quite the full Lua/V.S. integration I was/still-am hoping for, but it helps.&amp;nbsp; The add-on is called&amp;nbsp;&lt;A href="http://www.sjbrown.co.uk/lualite.html"&gt;lualite&lt;/A&gt; and if you're a Lua programmer, or are a V.S. user who's interested in checking out Lua, I'd highly recommend taking a look.&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-111826812368422284?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/111826812368422284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=111826812368422284' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/111826812368422284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/111826812368422284'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2005/06/integrating-lua-into-visual-studio.html' title='Integrating Lua Into Visual Studio'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-111508684492969156</id><published>2005-05-02T22:20:00.000-04:00</published><updated>2005-05-02T22:47:39.740-04:00</updated><title type='text'>My South Park Portrait</title><content type='html'>&lt;P&gt;Flash apps aren't always the fastest on the planet, however they're often the easiest to run, which usually seems to be far more important.&amp;nbsp; Anyhoo...&lt;/P&gt;&lt;br /&gt;&lt;P&gt;&lt;IMG alt="" src="http://www.project-404.net/~davidl/blog_pics//South_Park_Persona.jpg" border=0&gt;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;My portrait, which was built using the&amp;nbsp;slick,&amp;nbsp;Flash-based,&amp;nbsp;&lt;A href="http://www.planearium2.de/flash/sp-studio-e.html"&gt;South Park Generator&lt;/A&gt;. :-)&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-111508684492969156?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/111508684492969156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=111508684492969156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/111508684492969156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/111508684492969156'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2005/05/my-south-park-portrait.html' title='My South Park Portrait'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12483086.post-111463144031666009</id><published>2005-04-27T15:31:00.000-04:00</published><updated>2005-04-27T16:04:48.940-04:00</updated><title type='text'>x = *((int *)0);</title><content type='html'>I've decided to start posting a semi-professional blog here. Programming will likely be discussed, as well as video games, open source software, and whatever random bits come out of my head. At the moment, however, I have a C++/Lua bridge to work/hack-away on, something that's a part of my job at &lt;a href="http://www.funkitron.com/"&gt;Funkitron, Inc.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Speaking of work, Funkitron put out a press release this afternoon regarding our just-released Poker Superstars game. According to the following image, which was provided by Business Wire, we're now among the ranks of such bigwigs as Apple and EA:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.project-404.net/%7Edavidl/blog_pics/Outlook.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Sure, Apple and EA put out more press releases than we do, but, well, whoopdie-do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12483086-111463144031666009?l=derefnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://derefnull.blogspot.com/feeds/111463144031666009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12483086&amp;postID=111463144031666009' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/111463144031666009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12483086/posts/default/111463144031666009'/><link rel='alternate' type='text/html' href='http://derefnull.blogspot.com/2005/04/x-int-0.html' title='x = *((int *)0);'/><author><name>David Ludwig</name><uri>http://www.blogger.com/profile/02105674885904892236</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
