<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>10 Most Recently Updated Pages</title>
		<link>http://hdrlab.org.nz/home/</link>
		<description>Shows a list of the 10 most recently updated pages.</description>

		
		<item>
			<title>Akismet no Longer Working on this Website</title>
			<link>http://hdrlab.org.nz/akismet-no-longer-working-on-this-website/</link>
			<description>&lt;p align=&quot;justify&quot;&gt;Today I noticed that no one could post comments on this website anymore. The Akismet module appeared to be stuck in an infinite loop, or at least taking too long. After 60 seconds of execution, a PHP script is cut off (note: this time-out is different on other web servers). Since I lack the time to investigate and fix this problem, Akismet is temporarily disabled. &lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;In order to prevent being spammed despite having no spam filter, math spam protection has been enabled. Math spam protection requires comment posters to solve a simple equation (e.g., what is eight plus three). Enabling this required adding the following line to mysite/_config.php:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;MathSpamProtection::setEnabled(); &lt;/p&gt;&lt;/blockquote&gt;&lt;p align=&quot;justify&quot;&gt;Whilst I hope that this will prevent any spam from getting through, writing a script to parse and solve these equations would not be particularly difficult. My preference would be to use a more sophisticated anti-spam method, such as &lt;a href=&quot;http://www.captcha.net/&quot; title=&quot;CAPTCHA&quot; target=&quot;_blank&quot;&gt;CAPTCHA&lt;/a&gt;. A &lt;a href=&quot;http://www.silverstripe.org/recaptcha-module/&quot; title=&quot;The Silverstripe reCAPTCHA module&quot; target=&quot;_blank&quot;&gt;module&lt;/a&gt; does exist for &lt;a href=&quot;http://www.recaptcha.net/&quot; title=&quot;reCAPTCHA&quot; target=&quot;_blank&quot;&gt;reCAPTCHA&lt;/a&gt;, but it is not integrated into the comment posting system.&amp;nbsp; &lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;Hopefully the math spam protection will be enough for now. At least comments can be posted again.&lt;/p&gt;</description>
			<pubDate>Wed, 07 Jan 2009 00:00:00 -0600</pubDate>
			
			<author>Hans de Ruiter</author>
			<guid>http://hdrlab.org.nz/akismet-no-longer-working-on-this-website/</guid>
		</item>
		
		<item>
			<title>Improving Website Navigation/Usability</title>
			<link>http://hdrlab.org.nz/improving-website-navigation-usability/</link>
			<description>&lt;p align=&quot;justify&quot;&gt;&lt;a href=&quot;http://www.amazon.com/gp/product/0321344758?ie=UTF8&amp;amp;tag=h089a-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0321344758&quot;&gt;&lt;img class=&quot;left&quot; src=&quot;http://hdrlab.org.nz/assets/Images/dontmakemethink2nd.png&quot; alt=&quot;Don't make me think by Steve Krug&quot; title=&quot;null&quot; hspace=&quot;null&quot; vspace=&quot;null&quot; width=&quot;150&quot; align=&quot;null&quot; /&gt;&lt;/a&gt;Regular visitors may have noticed the addition of drop-down menus on the navigation bar above. This was suggested to me by my brother, who correctly pointed out that this would make it easier to navigate this website. Indeed, examining the server logs shows that many visitors are already using it to jump to the sub-section of greatest interest. Previously, they had to click on a section, and then choose the desired sub-section in order to get to what they wanted. Not only do the new menus save time, they also give an instant overview of what the major topics of this website are, thus making it easier for visitors to find what they are looking for. The menus were implemented using the &lt;a href=&quot;http://javascript-array.com/scripts/simple_drop_down_menu/&quot; title=&quot;Simple Drop-Down Menu 2.0&quot; target=&quot;_blank&quot;&gt;Simple Drop-Down Menu code&lt;/a&gt; found on &lt;a href=&quot;http://javascript-array.com/scripts/simple_drop_down_menu/&quot; title=&quot;Simple Drop-Down Menu 2.0&quot; target=&quot;_blank&quot;&gt;this page&lt;/a&gt;. &lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;This highlights the importance of good website design, an area in which I still have much to learn. Possibly the best summary of what makes a good design is given by the book title &lt;a href=&quot;http://www.amazon.com/gp/product/0321344758?ie=UTF8&amp;amp;tag=h089a-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0321344758&quot; target=&quot;_blank&quot;&gt;&amp;quot;Don't Make Me Think&amp;quot;&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=h089a-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0321344758&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; by Steve Krug. Due to the overload of information on the internet and elsewhere, we no longer have the time or desire to examine everything in detail. To quote Steve Krug's book: &amp;quot;We don't read pages. We Scan them.&amp;quot; Essentially, everyone is instinctively trying to extract the information that they need in minimal time. Thus, a website is most effective if it makes it easy to find what one is looking for; if too much thinking is required, people are likely to walk away and look elsewhere.&amp;nbsp;&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;Small changes can make a big difference to how easy it is to find information. For example, not only does this website now have drop-down menus, but it is instantly apparent due to the triangular down arrows on the navigation bar. It is a standard convention to use these arrows to indicate that a sub-menu is present. Thus, a reader does not need to guess that these menus are available; it is immediately obvious.&amp;nbsp; &lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;From what I have seen so far, Steve Krug's book looks like a very good resource for anyone designing websites. It is the result of years of studying the behaviour of web-users and contains examples of pages and how users typically scan them. Clear comparisons of intuitive visuals and those that require extra thought or guess work are also provided. This book also comes highly recommended by others. I will be reading through it in depth soon. Anyone else who is interested in reading this book can find it at the following online stores (select the one closest to you): &lt;/p&gt;&lt;table align=&quot;center&quot; border=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;b&gt;Available online globally from the following stores: &lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;New Zealand&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://www.is1.clixgalore.com/Impression.aspx?BID=82605&amp;amp;AfID=185099&amp;amp;AdID=9371&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt;&lt;a href=&quot;http://www.clixGalore.com/PSale.aspx?BID=82605&amp;amp;AfID=185099&amp;amp;AdID=9371&amp;amp;AffDirectURL=thenile.co.nz%2fbooks%2fSteve-Krug%2fDont-Make-Me-Think-A-Common-Sense-Approach-To-Web-Usability%2f9780321344755%2f&amp;amp;LP=www.TheNile.co.nz&quot;&gt;Buy from thenile.co.nz&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Australia&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://www.is1.clixgalore.com/Impression.aspx?BID=75135&amp;amp;AfID=185099&amp;amp;AdID=8710&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt;&lt;a href=&quot;http://www.clixGalore.com/PSale.aspx?BID=75135&amp;amp;AfID=185099&amp;amp;AdID=8710&amp;amp;AffDirectURL=thenile.com.au%2fbooks%2fSteve-Krug%2fDont-Make-Me-Think-A-Common-Sense-Approach-To-Web-Usability%2f9780321344755%2f&amp;amp;LP=www.thenile.com.au&quot;&gt;Buy from thenile.com.au&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;United States of America&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.com/gp/product/0321344758?ie=UTF8&amp;amp;tag=h089a-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0321344758&quot;&gt;Buy from amazon.com&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=h089a-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0321344758&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Canada&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.ca/gp/product/0321344758?ie=UTF8&amp;amp;tag=h0e0-20&amp;amp;linkCode=as2&amp;amp;camp=15121&amp;amp;creative=390961&amp;amp;creativeASIN=0321344758&quot;&gt;Buy from amazon.ca&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.ca/e/ir?t=h0e0-20&amp;amp;l=as2&amp;amp;o=15&amp;amp;a=0321344758&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;United Kingdom&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.uk/gp/product/0321344758?ie=UTF8&amp;amp;tag=h05a-21&amp;amp;linkCode=as2&amp;amp;camp=1634&amp;amp;creative=19450&amp;amp;creativeASIN=0321344758&quot;&gt;Buy from amazon.co.uk&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.co.uk/e/ir?t=h05a-21&amp;amp;l=as2&amp;amp;o=2&amp;amp;a=0321344758&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;France&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.fr/gp/product/0321344758?ie=UTF8&amp;amp;tag=h03c5-21&amp;amp;linkCode=as2&amp;amp;camp=1642&amp;amp;creative=19458&amp;amp;creativeASIN=0321344758&quot;&gt;Achetez chez amazon.fr&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.fr/e/ir?t=h03c5-21&amp;amp;l=as2&amp;amp;o=8&amp;amp;a=0321344758&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Deutschland&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.de/gp/product/0321344758?ie=UTF8&amp;amp;tag=h08b-21&amp;amp;linkCode=as2&amp;amp;camp=1638&amp;amp;creative=19454&amp;amp;creativeASIN=0321344758&quot;&gt;Kaufen bei amazon.de&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.de/e/ir?t=h08b-21&amp;amp;l=as2&amp;amp;o=3&amp;amp;a=0321344758&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
			<pubDate>Sun, 04 Jan 2009 00:00:00 -0600</pubDate>
			
			<author>Hans de Ruiter</author>
			<guid>http://hdrlab.org.nz/improving-website-navigation-usability/</guid>
		</item>
		
		<item>
			<title>Full-Screen GLUT</title>
			<link>http://hdrlab.org.nz/full-screen-glut/</link>
			<description>&lt;table align=&quot;right&quot; border=&quot;0&quot; width=&quot;148&quot; height=&quot;178&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;img class=&quot;left&quot; src=&quot;http://hdrlab.org.nz/assets/MiniGL-templates/_resampled/ResizedImage200150-GLUT-fullscreen-screenshot.jpg&quot; alt=&quot;The same rotating triangle as previous templates, but on its own screen.&quot; title=&quot;null&quot; hspace=&quot;null&quot; vspace=&quot;null&quot; width=&quot;200&quot; height=&quot;150&quot; align=&quot;null&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;The same rotating triangle as in previous templates, but full-screen.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p align=&quot;justify&quot;&gt;Sometimes it is preferable to run a 3D application in its own screen, particularly for games. The first time that I wanted to do this, it took a surprizingly long time to find the documentation required, particularly considering that obtaining full-screen operation requires only 1-2 lines of code. This template has two different methods of opening a full-screen. These can be found in files GLUT-fullscreen.c, and GLUT-fullscreen2.c. The makefile will build both examples. &lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;&lt;a href=&quot;http://hdrlab.org.nz/learning-how-to-program-in-opengl-book-recommendations/&quot; title=&quot;Learning How to Program in OpenGL (Book Recommendations)&quot;&gt;Learn more about programming in OpenGL. Click here.&lt;/a&gt;&amp;nbsp; &lt;/p&gt;&lt;h2&gt;GLUT Game-Mode (GLUT-fullscreen.c)&lt;/h2&gt;&lt;p align=&quot;justify&quot;&gt;GLUT game-mode opens a screen of specific resolution and properties (e.g., bit-depth). The advange of this method over the other one is that it offers more control over the screen's properties. This advantage is somewhat diminished on Amiga OS, since its concept of screens is different from other operating-systems. More about that later. &lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;Achieving full-screen using the game-mode requires removing the glutCreateWindow() call, and replacing it with two new lines of code. For example:&lt;/p&gt;&lt;pre align=&quot;justify&quot;&gt;&amp;nbsp; &amp;nbsp; glutGameModeString(&amp;quot;640x480:24&amp;quot;);&lt;br /&gt;&amp;nbsp; &amp;nbsp; glutEnterGameMode(); &lt;br /&gt;&lt;/pre&gt;&lt;p align=&quot;justify&quot;&gt;The first line specifies the desired screen properties. GLUT will try to match those. It is possible to suggest a refresh-rate too, but this is currently ignored by MiniGL (the graphics drivers do not give you that option). The second line opens the full-screen window. Leaving GLUT game mode is achieved simply by calling glutLeaveGameMode(). &lt;/p&gt;&lt;h2&gt;GLUT Full-Screen (GLUT-fullscreen2.c) &lt;/h2&gt;&lt;p align=&quot;justify&quot;&gt;The other method of switching to full-screen is simply to call glutFullScreen() after opening the window. Exiting full-screen and returning to a window view can be achieved by calling glutReshape().&amp;nbsp; &lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;So why have two separate methods of switching to full-screen? Well, the specification for glutFullScreen() simply states that the image should cover the complete screen. In many systems, this means enlarging the window to cover the whole screen, and making it borderless. GLUT game-mode, on the other hand, allows specifying the resolution of the display. The reason for this implementation probably stems from the fact that most systems have no concept of multiple screens like the Amiga does. MiniGL&amp;nbsp; on Amiga OS 4 opens a separate screen in both cases. For glutFullScreen(), it tries to choose the screen-mode that most closely matches the original window. &lt;/p&gt;&lt;h2&gt;Download&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://hdrlab.org.nz/assets/MiniGL-templates/GLUT-fullscreen-template.lha&quot; target=&quot;_blank&quot; title=&quot;The GLUT full-screen template.&quot;&gt;GLUT full-screen templates&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;NOTE: For Amiga OS users/developers, this template requires features that are only available in &lt;a href=&quot;http://hdrlab.org.nz/minigl/&quot; title=&quot;MiniGL 2.0&quot;&gt;MiniGL 2.0&lt;/a&gt; or better.&amp;nbsp; </description>
			<pubDate>Fri, 27 Jun 2008 10:36:18 -0500</pubDate>
			
			<guid>http://hdrlab.org.nz/full-screen-glut/</guid>
		</item>
		
		<item>
			<title>Frame-Rate Independent Animation using GLUT</title>
			<link>http://hdrlab.org.nz/frame-rate-independent-animation-using-glut/</link>
			<description>&lt;table align=&quot;right&quot; border=&quot;0&quot; width=&quot;207&quot; height=&quot;181&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://hdrlab.org.nz/assets/MiniGL-templates/GLUT-template-screenshot.jpg&quot;&gt;&lt;img class=&quot;left&quot; src=&quot;http://hdrlab.org.nz/assets/MiniGL-templates/_resampled/ResizedImage200153-GLUT-template-screenshot.jpg&quot; alt=&quot;A screenshot of the unaltered GLUT template&quot; title=&quot;null&quot; hspace=&quot;null&quot; vspace=&quot;null&quot; width=&quot;200&quot; height=&quot;153&quot; align=&quot;null&quot; /&gt;&lt;/a&gt; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;A triangle that rotates at constant speed regardless of CPU load. &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p align=&quot;justify&quot;&gt;You may have experienced old computer games running so blazingly fast that they are unplayable, when run on a newer, faster, machine. This is due to the game relying on the timing of the specific machine for which it was designed. The &lt;a href=&quot;http://hdrlab.org.nz/a-basic-glut-application/&quot; title=&quot;The basic GLUT template&quot;&gt;basic GLUT template&lt;/a&gt; has the same problem. Try resizing the window. Make it small; notice how the triangle now spins at a ridiculously fast rate? Now make the window as big as the screen; the triangle slows down? This is because the different window sizes take different amounts of time to draw, resulting in different timing depending on the window size. The template simply uses 100% of the available CPU time to render and animate the triangle, with no regard to timing. This becomes even more annoying when another CPU intensive task is involved; the other task (or tasks) will cause the GLUT application timing to vary, resulting in stuttering animation. Thus, software such as games must be designed to compensate for variable timing. Methods for achieving this using GLUT are given below.&amp;nbsp; &lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;&lt;a href=&quot;http://hdrlab.org.nz/learning-how-to-program-in-opengl-book-recommendations/&quot; title=&quot;Learning How to Program in OpenGL (Book Recommendations)&quot;&gt;Learn more about programming in OpenGL. Click here.&lt;/a&gt;&amp;nbsp; &lt;/p&gt;&lt;h2&gt;Frame-Rate Limited Animation &lt;/h2&gt;&lt;p align=&quot;justify&quot;&gt;The easiest method of obtaining constant-speed animation, is to limit the frame-rate via the use of a timer. GLUT offers a hook that calls a specified function after a desired delay. Thus, this can be achieved simply by changing the animate() function in the basic template to:&lt;/p&gt;&lt;pre align=&quot;justify&quot;&gt;    void animate(int value)&lt;br /&gt;    { &lt;br /&gt;   &amp;nbsp;    glutTimerFunc(TIMERMSECS, animate, 0);&lt;br /&gt;        ... the rest of the animate code ... &lt;br /&gt;&lt;/pre&gt;&lt;p align=&quot;justify&quot;&gt;Here, TIMERMSECS is the delay in milliseconds between calls to animate. The new parameter &amp;quot;value&amp;quot; is ignored, but could be used for a single call-back function to differentiate between different timer events. The only other change left is to replace the following in the main() function:&lt;/p&gt;&lt;pre align=&quot;justify&quot;&gt;    glutIdleFunc(animate);&lt;br /&gt;&lt;/pre&gt;&lt;p align=&quot;justify&quot;&gt;with this: &lt;/p&gt;&lt;pre align=&quot;justify&quot;&gt;    glutTimerFunc(TIMERMSECS, animate, 0);&lt;/pre&gt;&lt;p align=&quot;justify&quot;&gt;This call starts the timer. This is all that is required for timer-based animation.&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;If you have a CPU monitoring utility, you will also note that this template uses a fraction of the CPU power of the other. This is because it only performs the processing required to render the animation at the desired speed. I recommend using a timer instead of an idle function (when in windowed mode) simply because there is no point in rendering 100+ fps on a display with a refresh rate of 60-75 Hz.&amp;nbsp; &lt;/p&gt;&lt;p&gt;The link to the template source code can be found in the &lt;a href=&quot;http://hdrlab.org.nz/#downloads&quot; title=&quot;Downloads&quot;&gt;downloads section below&lt;/a&gt;.&lt;/p&gt;&lt;h2&gt;Achieving Time-Independent Animation&lt;br /&gt;&lt;/h2&gt;&lt;p align=&quot;justify&quot;&gt;The timer based template above does not completely solve the animation speed problem. It effectively sets a constant frame-rate. However, if one were to run other programs simultaneously with the timer-based GLUT template, the animation will still stutter. Likewise, if processing time for any operation within a GLUT application takes longer than the timer period, the animation speed would still change. This is because the timing is not guaranteed; the computer will take &amp;quot;best-efforts&amp;quot; to meet the timing, but overloading the CPU will make this impossible. What is required is a mechanism for measuring elapsed time (and/or the time since the last frame), and responding appropriately.&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;Fortunately, GLUT offers an easy way to obtain the elapsed time since the application was started via the following line of code:&lt;/p&gt;&lt;pre align=&quot;justify&quot;&gt;&amp;nbsp; &amp;nbsp; int time = glutGet(GLUT_ELAPSED_TIME); &lt;/pre&gt;&lt;p align=&quot;justify&quot;&gt;The animate template provides two variables in the animate method that can be used for animation timing. ElapsedTime gives the number of milliseconds since the first timer tick; timeSincePrevFrame is the time in milliseconds since the previous frame occurred. You may notice that the template has a startTime variable that is initialised with a glutGet(GLUT_ELAPSED_TIME); call. This is just me being cautious. It also offers the ability to reset the timer if you so wish (e.g., when a new game is started).&amp;nbsp;&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;The template's default code rotates a triangle at constant angular velocity. This is achieved simply by multiplying the elapsed time with a constant, i.e., :&lt;/p&gt;&lt;pre align=&quot;justify&quot;&gt;&amp;nbsp; &amp;nbsp; rot = ROTRATE / 1000 *&amp;nbsp; elapsedTime;&lt;/pre&gt;&lt;p align=&quot;justify&quot;&gt;Try running this template simultaneously with the timer-based template, and then run other applications in order to bring CPU usage to 100%. Whilst the frame rate may drop and stutter, this template will keep the triangle rotating at constant speed, whereas the timer-based template will not. This shows frame-rate independent animation in action.&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;For more complicated animations, or game engines, it may be necessary to calculate the average frame-rate too. Often a game/animation engine will take varying lengths of time to perform all computations depending on factors such as the number of collisions, etc. In this case, one wishes to estimate what time it will be when the image is redrawn, not what time it is at the start of processing. However, the basic principles remain the same. &amp;nbsp; &lt;/p&gt;&lt;h2&gt;Downloads&lt;a name=&quot;downloads&quot; title=&quot;downloads&quot;&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://hdrlab.org.nz/assets/MiniGL-templates/GLUT-timertick-template.lha&quot; target=&quot;_blank&quot; title=&quot;A timer-based animation template for GLUT&quot;&gt;GLUT timer based animation template&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://hdrlab.org.nz/assets/MiniGL-templates/GLUT-animate-template.lha&quot; target=&quot;_blank&quot; title=&quot;The GLUT frame-rate independent animation template&quot;&gt;GLUT frame-rate independent animation template&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;NOTE: For Amiga OS users this template requires features that are only available in &lt;a href=&quot;http://hdrlab.org.nz/minigl/&quot; title=&quot;MiniGL 2.0&quot;&gt;MiniGL 2.0&lt;/a&gt; or better. </description>
			<pubDate>Wed, 18 Jun 2008 21:56:09 -0500</pubDate>
			
			<guid>http://hdrlab.org.nz/frame-rate-independent-animation-using-glut/</guid>
		</item>
		
		<item>
			<title>Learning How to Program in OpenGL (Book Recommendations)</title>
			<link>http://hdrlab.org.nz/learning-how-to-program-in-opengl-book-recommendations/</link>
			<description>&lt;p align=&quot;justify&quot;&gt;Programming in OpenGL has a steep initial learning curve, particularly for those with little experience in computer graphics or 3D mathematics. Whilst this website contains (expanding) learning &lt;a href=&quot;http://hdrlab.org.nz/3d-graphics-via-opengl/&quot; title=&quot;3D Graphics via OpenGL&quot;&gt;material for OpenGL&lt;/a&gt;, this is best augmented with additional material (e.g., books). There are, however, a plethora of books available on the topic and knowing which books to purchase can be tricky. Thus, this page lists the books that I think will be most useful to both newcomers, and experienced OpenGL programmers. Links to online shops that sell these items are provided. It is recommended that you use the store closest to your location in the world. &lt;/p&gt;&lt;h2&gt;OpenGL Programming Guide: The Official Guide To Learning Opengl, Version 2.1&lt;/h2&gt;&lt;p align=&quot;justify&quot;&gt;&lt;img class=&quot;left&quot; src=&quot;http://hdrlab.org.nz/assets/Articles/OpenGL/openglredbook6e.jpg&quot; alt=&quot;Opengl Programming Guide: The Official Guide To Learning Opengl, Version 2.1&quot; title=&quot;null&quot; hspace=&quot;null&quot; vspace=&quot;null&quot; width=&quot;160&quot; align=&quot;null&quot; /&gt;The first book on my recommended list is the official OpenGL Programming Guide, also known as &amp;quot;The OpenGL Red Book.&amp;quot; It is an indispensable reference to the complete OpenGL specification (up to version 2.1). As such, it is not he best book to learn OpenGL programming from scratch; however, even the most experienced programmers will need to look up how particular parts of the specification work from time to time. If someone were on a limited budget and could only afford to buy one book, this book would be the most useful, regardless of whether that person were a newcomer or an experienced OpenGL programmer (who would probably already have a copy).&lt;/p&gt;&lt;table align=&quot;center&quot; border=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;b&gt;Available online globally from the following stores: &lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;New Zealand&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://www.is1.clixgalore.com/Impression.aspx?BID=82605&amp;amp;AfID=185099&amp;amp;AdID=9371&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt;&lt;a href=&quot;http://www.clixGalore.com/PSale.aspx?BID=82605&amp;amp;AfID=185099&amp;amp;AdID=9371&amp;amp;AffDirectURL=thenile.co.nz%2fbooks%2fDave-Shreiner-Jackie-Neid%2fOpengl-Programming-Guide-The-Official-Guide-To-Learning-Opengl-Version-21%2f9780321481009%2f&amp;amp;LP=www.TheNile.co.nz&quot;&gt;Buy from thenile.co.nz&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Australia&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://www.is1.clixgalore.com/Impression.aspx?BID=75135&amp;amp;AfID=185099&amp;amp;AdID=8710&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt;&lt;a href=&quot;http://www.clixGalore.com/PSale.aspx?BID=75135&amp;amp;AfID=185099&amp;amp;AdID=8710&amp;amp;AffDirectURL=thenile.com.au%2fbooks%2fDave-Shreiner-Jackie-Neid%2fOpengl-Programming-Guide-The-Official-Guide-To-Learning-Opengl-Version-21%2f9780321481009%2f&amp;amp;LP=www.thenile.com.au&quot;&gt;Buy from thenile.com.au&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;United States of America&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.com/gp/product/0321481003?ie=UTF8&amp;amp;tag=h089a-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0321481003&quot;&gt;Buy from amazon.com&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=h089a-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0321481003&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Canada&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.ca/gp/product/0321481003?ie=UTF8&amp;amp;tag=h0e0-20&amp;amp;linkCode=as2&amp;amp;camp=15121&amp;amp;creative=330641&amp;amp;creativeASIN=0321481003&quot;&gt;Buy from amazon.ca&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.ca/e/ir?t=h0e0-20&amp;amp;l=as2&amp;amp;o=15&amp;amp;a=0321481003&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;United Kingdom&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.uk/gp/product/0321481003?ie=UTF8&amp;amp;tag=h05a-21&amp;amp;linkCode=as2&amp;amp;camp=1634&amp;amp;creative=6738&amp;amp;creativeASIN=0321481003&quot;&gt;Buy from amazon.co.uk&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.co.uk/e/ir?t=h05a-21&amp;amp;l=as2&amp;amp;o=2&amp;amp;a=0321481003&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;France&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.fr/gp/product/0321481003?ie=UTF8&amp;amp;tag=h03c5-21&amp;amp;linkCode=as2&amp;amp;camp=1642&amp;amp;creative=6746&amp;amp;creativeASIN=0321481003&quot;&gt;Acheter chez amazon.fr&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.fr/e/ir?t=h03c5-21&amp;amp;l=as2&amp;amp;o=8&amp;amp;a=0321481003&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Deutschland&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.de/gp/product/0321481003?ie=UTF8&amp;amp;tag=h08b-21&amp;amp;linkCode=as2&amp;amp;camp=1638&amp;amp;creative=6742&amp;amp;creativeASIN=0321481003&quot;&gt;Kaufen bei amazon.de&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.de/e/ir?t=h08b-21&amp;amp;l=as2&amp;amp;o=3&amp;amp;a=0321481003&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 class=&quot;parseasinTitle&quot;&gt;&lt;span&gt;OpenGL(R) Shading Language (2nd Edition)&lt;/span&gt;&lt;/h2&gt;&lt;h2 class=&quot;parseasinTitle&quot;&gt;&lt;img class=&quot;left&quot; src=&quot;http://hdrlab.org.nz/assets/Articles/OpenGL/openglyellowbook2e.jpg&quot; alt=&quot;OpenGL(R) Shading Language (2nd Edition)&quot; title=&quot;null&quot; hspace=&quot;null&quot; vspace=&quot;null&quot; width=&quot;160&quot; align=&quot;null&quot; /&gt;&lt;/h2&gt;&lt;p align=&quot;justify&quot;&gt;Modern graphics cards contain Graphics Processing Units (GPUs) which are highly reprogrammable. This allows complex and highly realistic graphics effects to be rendered efficiently on the graphics card. I have personally used the GPU in order to offload computationally intensive computer vision processing from the CPU (see the &lt;a href=&quot;http://hdrlab.org.nz/about-me/&quot; title=&quot;About Me&quot;&gt;about page&lt;/a&gt;). This programmability and powerful processing engine is used via shaders, and the OpenGL Shading Language (GLSL). Also known as &amp;quot;The Yellow Book,&amp;quot; this book details how shaders and the shading language are used. Like the red book, this book is an indispensable reference for anyone who wishes to use shaders. &lt;/p&gt;&lt;table align=&quot;center&quot; border=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;b&gt;Available online globally from the following stores: &lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;New Zealand&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://www.is1.clixgalore.com/Impression.aspx?BID=82605&amp;amp;AfID=185099&amp;amp;AdID=9371&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt;&lt;a href=&quot;http://www.clixGalore.com/PSale.aspx?BID=82605&amp;amp;AfID=185099&amp;amp;AdID=9371&amp;amp;AffDirectURL=thenile.co.nz%2fbooks%2fRandi-J-Rost%2fOpengl-Shading-Language%2f9780321334893%2f&amp;amp;LP=www.TheNile.co.nz&quot;&gt;Buy from thenile.co.nz&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Australia&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://www.is1.clixgalore.com/Impression.aspx?BID=75135&amp;amp;AfID=185099&amp;amp;AdID=8710&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt;&lt;a href=&quot;http://www.clixGalore.com/PSale.aspx?BID=75135&amp;amp;AfID=185099&amp;amp;AdID=8710&amp;amp;AffDirectURL=thenile.com.au%2fbooks%2fRandi-J-Rost%2fOpengl-Shading-Language%2f9780321334893%2f&amp;amp;LP=www.thenile.com.au&quot;&gt;Buy from thenile.com.au&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;United States of America&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.com/gp/product/0321334892?ie=UTF8&amp;amp;tag=h089a-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321334892&quot;&gt;Buy from amazon.com&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=h089a-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0321334892&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Canada&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.ca/gp/product/0321334892?ie=UTF8&amp;amp;tag=h0e0-20&amp;amp;linkCode=as2&amp;amp;camp=15121&amp;amp;creative=330641&amp;amp;creativeASIN=0321334892&quot;&gt;Buy from amazon.ca&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.ca/e/ir?t=h0e0-20&amp;amp;l=as2&amp;amp;o=15&amp;amp;a=0321334892&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;United Kingdom&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.uk/gp/product/0321334892?ie=UTF8&amp;amp;tag=h05a-21&amp;amp;linkCode=as2&amp;amp;camp=1634&amp;amp;creative=6738&amp;amp;creativeASIN=0321334892&quot;&gt;Buy from amazon.co.uk&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.co.uk/e/ir?t=h05a-21&amp;amp;l=as2&amp;amp;o=2&amp;amp;a=0321334892&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;France&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.fr/gp/product/0321334892?ie=UTF8&amp;amp;tag=h03c5-21&amp;amp;linkCode=as2&amp;amp;camp=1642&amp;amp;creative=6746&amp;amp;creativeASIN=0321334892&quot;&gt;Achetez chez amazon.fr&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.fr/e/ir?t=h03c5-21&amp;amp;l=as2&amp;amp;o=8&amp;amp;a=0321334892&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Deutschland&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.de/gp/product/0321334892?ie=UTF8&amp;amp;tag=h08b-21&amp;amp;linkCode=as2&amp;amp;camp=1638&amp;amp;creative=6742&amp;amp;creativeASIN=0321334892&quot;&gt;Kaufen bei amazon.de&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.de/e/ir?t=h08b-21&amp;amp;l=as2&amp;amp;o=3&amp;amp;a=0321334892&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2&gt;The OpenGL Library (Boxed Set)&lt;/h2&gt;&lt;p align=&quot;justify&quot;&gt;&lt;img class=&quot;left&quot; src=&quot;http://hdrlab.org.nz/assets/Articles/OpenGL/opengllibrary.jpg&quot; alt=&quot;The OpenGL Library&quot; title=&quot;null&quot; hspace=&quot;null&quot; vspace=&quot;null&quot; width=&quot;160&quot; align=&quot;null&quot; /&gt;The two books listed above are also available at significant discount as a boxed set. Seeing as these two books are complimentary and both books are essential for using the full OpenGL specification, buying these two as a set is highly recommended. &lt;/p&gt;&lt;table align=&quot;center&quot; border=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;b&gt;Available online globally from the following stores: &lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;New Zealand&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://www.is1.clixgalore.com/Impression.aspx?BID=82605&amp;amp;AfID=185099&amp;amp;AdID=9371&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt;&lt;a href=&quot;http://www.clixGalore.com/PSale.aspx?BID=82605&amp;amp;AfID=185099&amp;amp;AdID=9371&amp;amp;AffDirectURL=thenile.co.nz%2fbooks%2fDave-Shreiner-Opengl-Arch%2fOpengl-Library%2f9780321514325%2f&amp;amp;LP=www.TheNile.co.nz&quot;&gt;Buy from thenile.co.nz&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Australia&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://www.is1.clixgalore.com/Impression.aspx?BID=75135&amp;amp;AfID=185099&amp;amp;AdID=8710&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt;&lt;a href=&quot;http://www.clixGalore.com/PSale.aspx?BID=75135&amp;amp;AfID=185099&amp;amp;AdID=8710&amp;amp;AffDirectURL=thenile.com.au%2fbooks%2fDave-Shreiner-Opengl-Arch%2fOpengl-Library%2f9780321514325%2f&amp;amp;LP=www.thenile.com.au&quot;&gt;Buy from thenile.com.au&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;United States of America&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.com/gp/product/0321514327?ie=UTF8&amp;amp;tag=h089a-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321514327&quot;&gt;Buy from amazon.com&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=h089a-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0321514327&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Canada&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.ca/gp/product/0321514327?ie=UTF8&amp;amp;tag=h0e0-20&amp;amp;linkCode=as2&amp;amp;camp=15121&amp;amp;creative=330641&amp;amp;creativeASIN=0321514327&quot;&gt;Buy from amazon.ca&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.ca/e/ir?t=h0e0-20&amp;amp;l=as2&amp;amp;o=15&amp;amp;a=0321514327&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;United Kingdom&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.uk/gp/product/0321514327?ie=UTF8&amp;amp;tag=h05a-21&amp;amp;linkCode=as2&amp;amp;camp=1634&amp;amp;creative=6738&amp;amp;creativeASIN=0321514327&quot;&gt;Buy from amazon.co.uk&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.co.uk/e/ir?t=h05a-21&amp;amp;l=as2&amp;amp;o=2&amp;amp;a=0321514327&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;France&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.fr/gp/product/0321514327?ie=UTF8&amp;amp;tag=h03c5-21&amp;amp;linkCode=as2&amp;amp;camp=1642&amp;amp;creative=6746&amp;amp;creativeASIN=0321514327&quot;&gt;Achetez chez amazon.fr&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.fr/e/ir?t=h03c5-21&amp;amp;l=as2&amp;amp;o=8&amp;amp;a=0321514327&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Deutschland&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.de/gp/product/0321514327?ie=UTF8&amp;amp;tag=h08b-21&amp;amp;linkCode=as2&amp;amp;camp=1638&amp;amp;creative=6742&amp;amp;creativeASIN=0321514327&quot;&gt;Kaufen bei amazon.de&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.de/e/ir?t=h08b-21&amp;amp;l=as2&amp;amp;o=3&amp;amp;a=0321514327&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p align=&quot;justify&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h2 class=&quot;parseasinTitle&quot;&gt;&lt;span&gt;OpenGL(R) SuperBible: Comprehensive Tutorial and Reference (4th Edition) &lt;/span&gt;&lt;/h2&gt;&lt;p align=&quot;justify&quot;&gt;&lt;img class=&quot;left&quot; src=&quot;http://hdrlab.org.nz/assets/Articles/OpenGL/OpenGLSuperBible.jpg&quot; alt=&quot;OpenGL(R) SuperBible: Comprehensive Tutorial and Reference (4th Edition)&quot; title=&quot;null&quot; hspace=&quot;null&quot; vspace=&quot;null&quot; width=&quot;160&quot; align=&quot;null&quot; /&gt;The two books listed above are reference books. Recommending a book for learning OpenGL is difficult since people's learning styles are different. This is made even harder because I personally struggled through with just the reference books and various online tutorials. Nevertheless, the OpenGL SuperBible is a book that I can recommend as a learning tool. It covers all the major topics of computer graphics and provides exemple source-code. This book was written by members of the OpenGL Architecture Review Board, the board that decides on future changes to the OpenGL specification. It contains information about OpenGL on multiple platforms as well as a chapter on OpenGL ES, the OpenGL variant for embedded systems and handheld devices.&lt;/p&gt;&lt;table align=&quot;center&quot; border=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;b&gt;Available online globally from the following stores: &lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;New Zealand&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://www.is1.clixgalore.com/Impression.aspx?BID=82605&amp;amp;AfID=185099&amp;amp;AdID=9371&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt;&lt;a href=&quot;http://www.clixGalore.com/PSale.aspx?BID=82605&amp;amp;AfID=185099&amp;amp;AdID=9371&amp;amp;AffDirectURL=thenile.co.nz%2fbooks%2fBenjamin-Lipchak-Jr-Richa%2fOpengl-Superbible-Comprehensive-Tutorial-And-Reference%2f9780321498823%2f&amp;amp;LP=www.TheNile.co.nz&quot;&gt;Buy from thenile.co.nz&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Australia&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://www.is1.clixgalore.com/Impression.aspx?BID=75135&amp;amp;AfID=185099&amp;amp;AdID=8710&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt;&lt;a href=&quot;http://www.clixGalore.com/PSale.aspx?BID=75135&amp;amp;AfID=185099&amp;amp;AdID=8710&amp;amp;AffDirectURL=thenile.com.au%2fbooks%2fBenjamin-Lipchak-Jr-Richa%2fOpengl-Superbible-Comprehensive-Tutorial-And-Reference%2f9780321498823%2f&amp;amp;LP=www.thenile.com.au&quot;&gt;Buy from thenile.com.au&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;United States of America&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.com/gp/product/0321498828?ie=UTF8&amp;amp;tag=h089a-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321498828&quot;&gt;Buy from amazon.com&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=h089a-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0321498828&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Canada&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.ca/gp/product/0321498828?ie=UTF8&amp;amp;tag=h0e0-20&amp;amp;linkCode=as2&amp;amp;camp=15121&amp;amp;creative=330641&amp;amp;creativeASIN=0321498828&quot;&gt;Buy from amazon.ca&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.ca/e/ir?t=h0e0-20&amp;amp;l=as2&amp;amp;o=15&amp;amp;a=0321498828&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;United Kingdom&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.uk/gp/product/0321498828?ie=UTF8&amp;amp;tag=h05a-21&amp;amp;linkCode=as2&amp;amp;camp=1634&amp;amp;creative=6738&amp;amp;creativeASIN=0321498828&quot;&gt;Buy from amazon.co.uk&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.co.uk/e/ir?t=h05a-21&amp;amp;l=as2&amp;amp;o=2&amp;amp;a=0321498828&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;France&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.fr/gp/product/0321498828?ie=UTF8&amp;amp;tag=h03c5-21&amp;amp;linkCode=as2&amp;amp;camp=1642&amp;amp;creative=6746&amp;amp;creativeASIN=0321498828&quot;&gt;Achetez chez amazon.fr&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.fr/e/ir?t=h03c5-21&amp;amp;l=as2&amp;amp;o=8&amp;amp;a=0321498828&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Deutschland&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.de/gp/product/0321498828?ie=UTF8&amp;amp;tag=h08b-21&amp;amp;linkCode=as2&amp;amp;camp=1638&amp;amp;creative=6742&amp;amp;creativeASIN=0321498828&quot;&gt;Kaufen bei amazon.de&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.de/e/ir?t=h08b-21&amp;amp;l=as2&amp;amp;o=3&amp;amp;a=0321498828&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p align=&quot;justify&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h2 class=&quot;parseasinTitle&quot;&gt;&lt;span&gt;Interactive Computer Graphics: A Top-Down Approach Using OpenGL (5th Edition)&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p align=&quot;justify&quot;&gt;&lt;img class=&quot;left&quot; src=&quot;http://hdrlab.org.nz/assets/Articles/OpenGL/interactivecomputergraphicsbook.jpg&quot; alt=&quot;Interactive Computer Graphics: A Top-Down Approach Using OpenGL&quot; title=&quot;null&quot; hspace=&quot;null&quot; vspace=&quot;null&quot; width=&quot;160&quot; align=&quot;null&quot; /&gt;Those who prefer a more hands-on approach may prefer this book over the OpenGL SuperBible. &amp;quot;Interactive Computer Graphics: A Top-Down Approach Using OpenGL&amp;quot; leaves some of the more complex details and underlying concepts for later, starting instead with getting readers writing programs that display 3D graphics. Whilst some may find this approach lacking in structure, it may be better for those who tend to experiment first, and get into greater depth later. Its author, Edward Angel, is a Professor of Computer Science and is, thus, familiar with the needs of students learning graphics concepts. &lt;/p&gt;&lt;table align=&quot;center&quot; border=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;b&gt;Available online globally from the following stores: &lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;New Zealand&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://www.is1.clixgalore.com/Impression.aspx?BID=82605&amp;amp;AfID=185099&amp;amp;AdID=9371&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt;&lt;a href=&quot;http://www.clixGalore.com/PSale.aspx?BID=82605&amp;amp;AfID=185099&amp;amp;AdID=9371&amp;amp;AffDirectURL=thenile.co.nz%2fbooks%2fEdward-Angel%2fInteractive-Computer-Graphics%2f9780321549433%2f&amp;amp;LP=www.TheNile.co.nz&quot;&gt;Buy from thenile.co.nz&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Australia&lt;/td&gt;&lt;td&gt;&lt;img src=&quot;http://www.is1.clixgalore.com/Impression.aspx?BID=75135&amp;amp;AfID=185099&amp;amp;AdID=8710&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt;&lt;a href=&quot;http://www.clixGalore.com/PSale.aspx?BID=75135&amp;amp;AfID=185099&amp;amp;AdID=8710&amp;amp;AffDirectURL=thenile.com.au%2fbooks%2fEdward-Angel%2fInteractive-Computer-Graphics%2f9780321549433%2f&amp;amp;LP=www.thenile.com.au&quot;&gt;Buy from thenile.com.au&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;United States of America&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.com/gp/product/0321535863?ie=UTF8&amp;amp;tag=h089a-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321535863&quot;&gt;Buy from amazon.com&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=h089a-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0321535863&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Canada&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.ca/gp/product/0321535863?ie=UTF8&amp;amp;tag=h0e0-20&amp;amp;linkCode=as2&amp;amp;camp=15121&amp;amp;creative=330641&amp;amp;creativeASIN=0321535863&quot;&gt;Buy from amazon.ca&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.ca/e/ir?t=h0e0-20&amp;amp;l=as2&amp;amp;o=15&amp;amp;a=0321535863&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;United Kingdom&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.co.uk/gp/product/0321535863?ie=UTF8&amp;amp;tag=h05a-21&amp;amp;linkCode=as2&amp;amp;camp=1634&amp;amp;creative=19450&amp;amp;creativeASIN=0321535863&quot;&gt;Buy from amazon.co.uk&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.co.uk/e/ir?t=h05a-21&amp;amp;l=as2&amp;amp;o=2&amp;amp;a=0321535863&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;France&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.fr/gp/product/0321535863?ie=UTF8&amp;amp;tag=h03c5-21&amp;amp;linkCode=as2&amp;amp;camp=1642&amp;amp;creative=19458&amp;amp;creativeASIN=0321535863&quot;&gt;Achetez chez amazon.fr&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.fr/e/ir?t=h03c5-21&amp;amp;l=as2&amp;amp;o=8&amp;amp;a=0321535863&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Deutschland&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.amazon.de/gp/product/0321535863?ie=UTF8&amp;amp;tag=h08b-21&amp;amp;linkCode=as2&amp;amp;camp=1638&amp;amp;creative=19454&amp;amp;creativeASIN=0321535863&quot;&gt;Kaufen bei amazon.de&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.de/e/ir?t=h08b-21&amp;amp;l=as2&amp;amp;o=3&amp;amp;a=0321535863&quot; width=&quot;1&quot; height=&quot;1&quot;  alt=&quot;&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p align=&quot;justify&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h2 align=&quot;justify&quot;&gt;Final Comments&lt;/h2&gt;&lt;p align=&quot;justify&quot;&gt;This concludes my list of recommended books for learning OpenGL. There may well be other good books available that are not listed above, so people may wish to have a look at other titles that are available. The ones listed, however, are books that I consider to be worth reading or having as a reference. &lt;/p&gt;</description>
			<pubDate>Thu, 11 Dec 2008 23:29:57 -0600</pubDate>
			
			<guid>http://hdrlab.org.nz/learning-how-to-program-in-opengl-book-recommendations/</guid>
		</item>
		
		<item>
			<title>Installing Silverstripe on Kiwihosting.net.nz</title>
			<link>http://hdrlab.org.nz/installing-silverstripe-on-kiwihosting-net-nz/</link>
			<description>&lt;p align=&quot;justify&quot;&gt;Following up from &lt;a href=&quot;http://hdrlab.org.nz/the-url-base-prepending-culprit-has-been-found/&quot; title=&quot;The URL Base Prepending Culprit has been Found&quot;&gt;one of the previous blog posts&lt;/a&gt;, I have deleted all the extra rewrite rules from the .htaccess file, and the CMS operates perfectly. So, here are the installation instructions for anyone wishing to use &lt;a href=&quot;http://www.silverstripe.com&quot; target=&quot;_blank&quot; title=&quot;Silverstripe&quot;&gt;Silverstripe&lt;/a&gt; with &lt;a href=&quot;http://kiwihosting.net.nz&quot; target=&quot;_blank&quot; title=&quot;Kiwihosting.net.nz&quot;&gt;kiwihosting.net.nz&lt;/a&gt;. These instructions may also solve problems on other hosts.&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;&lt;b&gt;IMPORTANT: These instructions are for Kiwihosting's HSphere based Unix servers only. See &lt;a href=&quot;http://hdrlab.org.nz/website-transferred-to-kiwihosting-net-nz-s-helm-windows-servers/&quot; title=&quot;Website Transferred to Kiwihosting.net.nz's HELM (Windows) Servers&quot;&gt;this blog entry&lt;/a&gt; if you are installing on their newer Helm based Windows servers (2009/01/05).&lt;/b&gt;&lt;/p&gt;&lt;h3&gt;Installation Instructions&lt;/h3&gt;&lt;p align=&quot;justify&quot;&gt;Download the &lt;a href=&quot;http://www.silverstripe.com/silverstripe-web-application-framework/&quot; target=&quot;_blank&quot; title=&quot;Silverstripe download&quot;&gt;latest Silverstripe archive&lt;/a&gt; and decompress it to a directory. Open up sapphire/main.php, and search for the following line:&lt;/p&gt;&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $baseURL = dirname(dirname(dirname(dirname($_SERVER['SCRIPT_NAME']))));&lt;/pre&gt;&lt;p align=&quot;justify&quot;&gt;Replace this line with:&lt;/p&gt;&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $baseURL = &amp;quot;/&amp;quot;; &lt;/pre&gt;&lt;p align=&quot;justify&quot;&gt;In version 2.2.2, this is at line 149. Upload the Silverstripe files to the server as per normal installation. Next, create a new .htaccess file containing the following:&lt;/p&gt;&lt;pre&gt;    php_flag zend.ze1_compatibility_mode Off&lt;br /&gt;    php_value allow_call_time_pass_reference on&lt;br /&gt;    php_value register_globals off&lt;br /&gt;&lt;br /&gt;    ### SILVERSTRIPE START ###&lt;br /&gt;    RewriteEngine On&lt;br /&gt;    RewriteBase /&lt;br /&gt;&lt;br /&gt;    RewriteCond %{REQUEST_URI} !(\.gif)|(\.jpg)|(\.png)|(\.css)|(\.js)|(\.php)$ &lt;br /&gt;    RewriteCond %{REQUEST_URI} ^(.*)$&lt;br /&gt;    RewriteCond %{REQUEST_URI} !(/awstats/*)$&lt;br /&gt;    RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;    RewriteRule .* /sapphire/main.php?url=%1&amp;amp;%{QUERY_STRING} [L]&lt;br /&gt;    ### SILVERSTRIPE END ###&lt;br /&gt;&lt;/pre&gt;&lt;p align=&quot;justify&quot;&gt;Upload this .htaccess file to the root directory of the server. Next, complete the &lt;a href=&quot;http://doc.silverstripe.com/doku.php?id=installation-on-webserver&quot; target=&quot;_blank&quot; title=&quot;Silverstripe installation procedure&quot;&gt;standard installation procedure&lt;/a&gt;. The server may complain that mod-rewrite is not working; this is okay. At this point, you may need to upload the .htaccess file again, because the installer may change it. &lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;Download the file mysite/_config.php (via FTP). Add the following line:&lt;/p&gt;&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Director::setBaseURL('/'); &lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Now upload mysite/_config.php back to the server. Silverstripe should now be installed, and work correctly. &lt;/p&gt;</description>
			<pubDate>Mon, 07 Jul 2008 00:00:00 -0500</pubDate>
			
			<author>Hans de Ruiter</author>
			<guid>http://hdrlab.org.nz/installing-silverstripe-on-kiwihosting-net-nz/</guid>
		</item>
		
		<item>
			<title>Website Transferred to Kiwihosting.net.nz's HELM (Windows) Servers</title>
			<link>http://hdrlab.org.nz/website-transferred-to-kiwihosting-net-nz-s-helm-windows-servers/</link>
			<description>&lt;p align=&quot;justify&quot;&gt;Previously, this website was hosted one of &lt;a href=&quot;http://kiwihosting.net.nz&quot; title=&quot;Kiwihosting.net.nz&quot; target=&quot;_blank&quot;&gt;Kiwihosting.net.nz&lt;/a&gt;'s Unix (HSphere) servers. They now have newer, faster Windows servers that are &lt;a href=&quot;http://www.parallels.com/products/helm/&quot; title=&quot;Parallels Helm&quot; target=&quot;_blank&quot;&gt;Helm&lt;/a&gt; based. Not only are they faster, they currently also offer twice the bandwidth and disk space of the older hosting plans on their HSphere servers. They also offered six months free hosting to those who volunteered to move their websites to the new hosts without assistance. After some minor issues with this website over the weekend, I decided to move to the new hosts. To make things easy, Kiwihosting's staff had already created &lt;a href=&quot;http://forums.kiwihosting.net.nz/index.php?showtopic=1002&amp;amp;hl=silverstripe&quot; title=&quot;Installing Silverstripe on HELM Servers&quot; target=&quot;_blank&quot;&gt;installation instructions for Silverstripe on the new servers&lt;/a&gt;.&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;The move proved to be fairly painless, even though it took a while to transfer the files and database across. Their instructions worked well, except that the administration pages of this website required a bit more memory than the 32 MiB that Silverstripe demands. This was easy to fix, the main entry script (sapphire/main.php) checks the PHP memory limit and increases it to 32 MiB in the following lines:&lt;/p&gt;&lt;blockquote&gt;&lt;p align=&quot;justify&quot;&gt;// Check we have at least 32M&lt;br /&gt;if($memory &amp;lt; (32 * 1024 * 1024)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Increase memory limit&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ini_set('memory_limit', '32M');&lt;br /&gt;}&lt;/p&gt;&lt;/blockquote&gt;&lt;p align=&quot;justify&quot;&gt;Changing this to the following increases the memory limit to 64 MiB:&lt;/p&gt;&lt;blockquote&gt;&lt;p align=&quot;justify&quot;&gt;// Check we have at least 64M&lt;br /&gt;if($memory &amp;lt; (64 * 1024 * 1024)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Increase memory limit&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ini_set('memory_limit', '64M');&lt;br /&gt;} &lt;/p&gt;&lt;/blockquote&gt;&lt;p align=&quot;justify&quot;&gt;Apart from this one change, everything else was as per &lt;a href=&quot;http://forums.kiwihosting.net.nz/index.php?showtopic=1002&amp;amp;hl=silverstripe&quot; title=&quot;Installing Silverstripe on HELM Servers&quot; target=&quot;_blank&quot;&gt;Kiwihosting's own installation instructions&lt;/a&gt;.&lt;/p&gt;</description>
			<pubDate>Sun, 04 Jan 2009 00:00:00 -0600</pubDate>
			
			<author>Hans de Ruiter</author>
			<guid>http://hdrlab.org.nz/website-transferred-to-kiwihosting-net-nz-s-helm-windows-servers/</guid>
		</item>
		
		<item>
			<title>A (Linux) Server for Software Developers</title>
			<link>http://hdrlab.org.nz/a-linux-server-for-software-developers/</link>
			<description>&lt;p align=&quot;justify&quot;&gt;&lt;img class=&quot;left&quot; src=&quot;http://hdrlab.org.nz/assets/Articles/Images/TracSVNX11openSSH.png&quot; alt=&quot;Trac Subversion X-Windows and OpenSSH&quot; title=&quot;null&quot; hspace=&quot;null&quot; vspace=&quot;null&quot; width=&quot;160&quot; align=&quot;null&quot; /&gt;Trac and SubVersioN (SVN) are two tools that I consider to be almost essential for serious software development. As explained in &lt;a href=&quot;http://hdrlab.org.nz/essential-software-development-tools/&quot; title=&quot;Essential Software Development Tools&quot;&gt;another article&lt;/a&gt;, these two tools provide the means to track changes to a software project as well as bugs and tasks to be done. They are useful even with single developer projects. In my own personal development environment, these services are running on a machine running Debian Linux. Debian is due to my own personal preference and past experience in using Linux. Whilst it is perfectly possible to run everything on one machine, having these services on a separate machine automatically provides a backup on a separate machine. That same server could also be used for other tasks, such as being part of a distributed compiler network for faster building of large software projects. &lt;/p&gt;&lt;h2 align=&quot;justify&quot;&gt;The Proposed Server&lt;/h2&gt;&lt;p align=&quot;justify&quot;&gt;This section of the website contains all the details required in order to set up and use a server running Debian Linux. It is assumed that this is for personal use, or for a small business since big companies have a dedicated Information Technology (IT) department that takes care of these kind of tasks so that the developers can get on with their own jobs. The proposed server approximately mirrors my own personal set up, but could easily be modified for anyone else's needs. &lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;The server detailed in this section has the following specifications:&lt;/p&gt;&lt;div align=&quot;justify&quot;&gt;&lt;ul&gt;&lt;li&gt;Secure access via SSL to all resources,&lt;/li&gt;&lt;li&gt;A Trac server that houses multiple projects (accessed via HTTPS),&lt;/li&gt;&lt;li&gt;A multi-project SVN server that contains repositories for all the Trac projects (accessed via HTTPS),&lt;/li&gt;&lt;li&gt;Secure remote terminal access via SSH for remote system administration, and&lt;/li&gt;&lt;li&gt;Remote X-Windows access via SSH for remote system administration (allows running non-DOS programs and even a full remote desktop session).&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p align=&quot;justify&quot;&gt;Scripts are provided for installation and usage wherever appropriate. The goal of this section of the website is to enable anyone that requires such a server to get it up and running and in service within minutes instead of spending days trying to figure out how each service is to be installed, configured and used. Thus, if anything is hard to understand, or could be achieved more easily, please &lt;a href=&quot;http://hdrlab.org.nz/contact-me/&quot; title=&quot;Contact Me&quot;&gt;let me know&lt;/a&gt;. Suggestions for improvements are always welcome.&lt;/p&gt;&lt;h2 align=&quot;justify&quot;&gt;Choosing a Computer to use as Server &lt;br /&gt;&lt;/h2&gt;&lt;p align=&quot;justify&quot;&gt;The server need not be a top of the line machine. Unless the server is accessed by many people simultaneously, a computer that is several years old should perform well enough. My own server is an old Compaq Presario 900 laptop from 2002 (this article was written in December 2008).&amp;nbsp; &lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;&lt;img class=&quot;center&quot; src=&quot;http://hdrlab.org.nz/assets/Articles/Images/_resampled/ResizedImage500281-compaq-presario-900.jpg&quot; alt=&quot;A Compaq Presario 900 Laptop being used as a Server&quot; title=&quot;null&quot; hspace=&quot;null&quot; vspace=&quot;null&quot; width=&quot;500&quot; height=&quot;281&quot; align=&quot;null&quot; /&gt;&lt;/p&gt;&lt;h2 align=&quot;justify&quot;&gt;Installing and Using the Server&lt;/h2&gt;&lt;p align=&quot;justify&quot;&gt;See the navigation menu on the left for the sub-pages that provide the installation and usage instructions. The most logical place to start would be &lt;a href=&quot;http://hdrlab.org.nz/setting-up-and-using-a-secure-trac-and-svn-server/&quot; title=&quot;Setting up and Using a Secure Trac and SVN Server&quot;&gt;&lt;span&gt;setting up the Trac and SVN services&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;</description>
			<pubDate>Fri, 19 Dec 2008 17:22:45 -0600</pubDate>
			
			<guid>http://hdrlab.org.nz/a-linux-server-for-software-developers/</guid>
		</item>
		
		<item>
			<title>Amiga OS 4 Articles</title>
			<link>http://hdrlab.org.nz/amiga-os-articles/</link>
			<description>&lt;img class=&quot;right&quot; src=&quot;http://hdrlab.org.nz/assets/Images/_resampled/ResizedImage167209-os4_blure.png&quot; title=&quot;null&quot; hspace=&quot;null&quot; vspace=&quot;null&quot; width=&quot;167&quot; height=&quot;209&quot;  alt=&quot;&quot; /&gt; &lt;p align=&quot;justify&quot;&gt;This section contains various articles related to Amiga OS 4, the latest version of the Amiga Operating System (OS). This is&amp;nbsp;the OS that introduced the world to multimedia. Amiga OS 4.0 has significantly modernized the OS and finally migrates fully to the PowerPC architecture, allowing it to use more powerful processors. Many of these articles are related to my &lt;a href=&quot;http://hdrlab.org.nz/amiga-os-4-projects/&quot; title=&quot;Amiga OS 4 articles&quot;&gt;Amiga projects&lt;/a&gt;. &lt;/p&gt;&lt;h2&gt;Related Links&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;div&gt;&lt;a href=&quot;http://os4.hyperion-entertainment.biz/&quot; target=&quot;_blank&quot; title=&quot;Amiga OS 4.0 information page&quot; class=&quot;null&quot;&gt;Amiga OS 4.0&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.hyperion-entertainment.biz/&quot; target=&quot;_blank&quot; title=&quot;Hyperion Entertainment website&quot; class=&quot;null&quot;&gt;&lt;img src=&quot;http://hdrlab.org.nz/assets/Images/_resampled/ResizedImage12369-Hyperionlogo.jpg&quot; title=&quot;Hyperion Entertainment VOF logo&quot; hspace=&quot;null&quot; vspace=&quot;null&quot; width=&quot;123&quot; height=&quot;69&quot; align=&quot;middle&quot;  alt=&quot;&quot; /&gt;&lt;/a&gt;&amp;nbsp; &lt;a href=&quot;http://www.hyperion-entertainment.biz/&quot; target=&quot;_blank&quot; title=&quot;Hyperion Entertainment website&quot; class=&quot;null&quot;&gt;Hyperion Entertainment VOF&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://amiga.com/&quot; target=&quot;_blank&quot; title=&quot;Amiga Inc. website&quot; class=&quot;null&quot;&gt;&lt;img src=&quot;http://hdrlab.org.nz/assets/Images/_resampled/ResizedImage13144-AmigaLogo.jpg&quot; title=&quot;null&quot; hspace=&quot;null&quot; vspace=&quot;null&quot; width=&quot;131&quot; height=&quot;44&quot; align=&quot;middle&quot;  alt=&quot;&quot; /&gt;&lt;/a&gt;&amp;nbsp; &lt;a href=&quot;http://amiga.com/&quot; target=&quot;_blank&quot; title=&quot;Amiga Inc. website&quot; class=&quot;null&quot;&gt;Amiga Inc.&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description>
			<pubDate>Thu, 05 Jun 2008 21:54:54 -0500</pubDate>
			
			<guid>http://hdrlab.org.nz/amiga-os-articles/</guid>
		</item>
		
		<item>
			<title>Amiga OS 4 Projects</title>
			<link>http://hdrlab.org.nz/amiga-os-4-projects/</link>
			<description>&lt;p&gt;&amp;nbsp;&lt;img class=&quot;right&quot; src=&quot;http://hdrlab.org.nz/assets/Images/_resampled/ResizedImage167209-os4_blure.png&quot; title=&quot;null&quot; hspace=&quot;null&quot; vspace=&quot;null&quot; width=&quot;167&quot; height=&quot;209&quot;  alt=&quot;&quot; /&gt; &lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;This section contains various projects related to Amiga OS 4, the latest version of the Amiga Operating System (OS). This is&amp;nbsp;the OS that introduced the world to multimedia. Amiga OS 4.0 has significantly modernized the OS and finally migrates fully to the PowerPC architecture, allowing it to use more powerful processors.&lt;/p&gt;&lt;p align=&quot;justify&quot;&gt;I have been working away quietly on a number of Amiga related projects. As they are ready, they will be added to this site. I hope that they will be of use to many of you.&lt;/p&gt;&lt;h2&gt;Related Links&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;div&gt;&lt;a href=&quot;http://os4.hyperion-entertainment.biz/&quot; target=&quot;_blank&quot; title=&quot;Amiga OS 4.0 information page&quot; class=&quot;null&quot;&gt;Amiga OS 4.0&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.hyperion-entertainment.biz/&quot; target=&quot;_blank&quot; title=&quot;Hyperion Entertainment website&quot; class=&quot;null&quot;&gt;&lt;img src=&quot;http://hdrlab.org.nz/assets/Images/_resampled/ResizedImage12369-Hyperionlogo.jpg&quot; title=&quot;Hyperion Entertainment VOF logo&quot; hspace=&quot;null&quot; vspace=&quot;null&quot; width=&quot;123&quot; height=&quot;69&quot; align=&quot;middle&quot;  alt=&quot;&quot; /&gt;&lt;/a&gt;&amp;nbsp; &lt;a href=&quot;http://www.hyperion-entertainment.biz/&quot; target=&quot;_blank&quot; title=&quot;Hyperion Entertainment website&quot; class=&quot;null&quot;&gt;Hyperion Entertainment VOF&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://amiga.com/&quot; target=&quot;_blank&quot; title=&quot;Amiga Inc. website&quot; class=&quot;null&quot;&gt;&lt;img src=&quot;http://hdrlab.org.nz/assets/Images/_resampled/ResizedImage13144-AmigaLogo.jpg&quot; title=&quot;null&quot; hspace=&quot;null&quot; vspace=&quot;null&quot; width=&quot;131&quot; height=&quot;44&quot; align=&quot;middle&quot;  alt=&quot;&quot; /&gt;&lt;/a&gt;&amp;nbsp; &lt;a href=&quot;http://amiga.com/&quot; target=&quot;_blank&quot; title=&quot;Amiga Inc. website&quot; class=&quot;null&quot;&gt;Amiga Inc.&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description>
			<pubDate>Sun, 22 Jun 2008 15:57:00 -0500</pubDate>
			
			<guid>http://hdrlab.org.nz/amiga-os-4-projects/</guid>
		</item>
		

	</channel>
</rss>
