XNA Developer's Survival Kit Expanded

Image courtesy of Nelson Hurst


GAME FRAMEWORKS

General
  • XNA Framework - the XNA Framework installation files & more
  • MonoGame - Source Code for the framework and its tools 
  • MonoGame Primitives 2D - this is the 2D XNA Primitives project ported to MonoGame by Jaap-Willem Dooge
  • FNA - Desktop unique reimplementation of XNA 4.0 apis. It can be used to build desktop versions and be sure to have the same behavior on all platforms.


RENDERING, GRAPHICS & GAME ENGINES

2D & 2.5-D Game Engines 
  • Jemgine - An extendable 2d Game Engine with an level editor
  • DEngine - a 2D game engine with an easy to use interface
  • Ianprime - a 2D XNA engine to help quickly develop games with less repetitive tasks
  • Phone 7 Tile Engine - a Tile Engine solution by Gareth Williams

  • Flat-Red-Ball Game Engine 
  • FlatRedBall - this engine is open source and will help you make 2.5D games (Main Website)
  • flatredball-js - an HTML5/ JavaScript port of the FlatRedBall engine (Documentation)
  • flatredball-spriter - a Glue plugin designed to make it ridiculously simple to load and use animations created with the Spriter tool in a FlatRedBall game (Main Website)
  • AnimChainsGenerator - automatic AnimationChains generator for FlatRedBall Game Engine
  • AnimChainsSheetPacker - sprite sheet packing of AnimChainList files (.achx) for FlatRedBall Game Engine
  • FRB-TexturePackerExporter - a TexturePacker exporter for the FlatRedBall game engine, with file build tool included
  • Model Plugin - a model-rendering plugin for the FlatRedBall game engine
  • FRB-TicTacToe - a TicTacToe game built using the FlatRedBall game engine and toolkit
  • FishKing - a simple fishing game created using the FlatRedBall engine and using resources from OpenGameArt


3D Game Engines



Rendering & Graphics

Cameras & Scenes 
  • XNA Camera - this will help you understand how the XNA camera works
  • ArcBall Camera - learn how to create your own arc-ball camera in this blog post by Roy Triesscheijn
  • Chase Camera - learn how to create a simple chase camera with spring physics
  • Camera Shake - learn how to increase immersion by shaking the game's camera
  • Simple FPS Camera - learn how to create a simple First-Person camera in MonoGame
  • Split-Screen - learn how to render the same scene to multiple viewports
  • Safe Area - learn how to make your game display correctly on a wide range of TV screens


Effects, Lighting & Shaders 
  • Shaders & Effects - learn the difference between pixel and vertex shaders and how to develop your own using FX Composer 
  • Custom Model Effect - learn how to apply a custom effect using the XNA Framework Content Pipeline
  • Distortion - learn how to implement a variety of screen-space distortion effects 
  • Fluid Shader - real-time fluid dynamics (give the author credit if used!)
  • FX Composer - a powerful integrated development environment for shader authoring 
  • NShader - Syntax Highlighting for your HLSL files
  • Non-Realistic Rendering - learn how to implement stylized non-photorealistic rendering techniques
  • Real-Time Fur - learn how to create and apply real-time fur to a model
  • Shatter Effect - learn how to apply an effect on any model and shatter it apart
  • Color Grading Filter - a color grading/ correction filter for XNA and MonoGame 
  • XNA Shader Programming Tutorials - Need help with HLSL (High-Level-Shader-Language)? Check out these tutorials by Petri Wilhelmsen. They are also listed below
  • XNA Shader Programming (Old) - this is Petri Wilhelmsen's source code for his XNA Shader programming tutorial series for XNA 3.1. They are also listed below
  • Weaver - HLSL surface shader parser for XNA/ MonoGame
  • Compile for Pixel Shader 3.0 - an excellent blog post by John Pile Jr
  • ShaderGen - Proof-of-concept library for generating HLSL/GLSL shader code from C#
  • 2MGFXGuiConverter - a drag'n drop shader converter created by Yannick Comte to use with 2MGFX. Convert all your effects without the use of the command line.


Depth of Field 


Motion Blur


Lighting
  • Basic Effect Lighting - a tutorial by RB Whitaker on creating a basic lighting effect
  • Diffuse Lighting - a tutorial by RB Whitaker on creating a diffuse lighting shader
  • Specular Lighting - a tutorial by RB Whitaker on creating a specular lighting shader
  • Stock Effects - Stock effects provides source code for the five effects (BasicEffect, SkinnedEffect, EnvironmentMapEffect, DualTextureEffect, and AlphaTestEffect), and the default shader used by SpriteBatch (SpriteEffect), built into the XNA Framework. There's also a command-line utility (CompileEffect) that uses the Content Pipeline to compile a .fx source file into a binary blob that can be passed directly to the XNA Framework Effect class constructor.
  • Rim Lighting - learn how to implement a rim lighting effect by using the standard graphics effects
  • XNA Sun Shader - learn how to create a sun effect in this tutorial by Nicolas Menzel
  • Bazier Path Lighting - an experimental extension to traditional Phong point lighting by Luke Thatcher
  • Lightning Sample - learn how to create a lightning effect for your games 

  • Lens Flare 
  • XNA Lens Flare - an XNA and MonoGame lens flare effect tutorial with lighting by Jason White. He founded Alien Scribble Interactive 
  • XNA Lens Flare Part 2 - obstructing light effects continuing from the previous tutorial
  • Lens-Flare - learn how to create an awesome lens-flare effect for your game 




  • 2D Lighting 
  • 2D Lightning - learn how to generate shockingly good 2D lightning effects by Michael Hoffman
  • 2D Spotlight - learn how to implement a 2D spotlight in XNA created by Vincent. Also, check out a continuation of the 2D lighting here 
  • 2D Lighting & Shadows - an excellent sample created by Roy Triesscheijn, based off of Catalin Zima's 2D lighting and shadows sample 
  • Dynamic 2D Lighting - an example using Managed DirectX to perform normal mapping, bloom post-processing, and dynamic shadows in 2D (not XNA)
  • Example of 2D Lighting - a great article on a simple way to make lighting for a 2D game
  • Penumbra - created by Jaanus Varus, this is an excellent open-source 2D lighting program with soft shadows for MonoGame
  • DarkLight - a 2D lighting engine in XNA that allows you to create 2D shadowing effects
  • Illuminant - a real-time 2D lighting and particles system library 
  • XNA 2D Lighting System - a 2D lighting system which supports point lights, spot lights, soft shadows, and colored lights


  • Bloom
  • Bloom Post-process - learn how to use bloom post-processing filters to add a glow effect over the top of an existing scene
  • Bloom Filter - a bloom filter module for XNA and MonoGame which can easily be added (check out this community forum post and more here)
  • Bloom Effect - MonoGame community bloom effect forum post


  • Deferred Rendering 
  • Deferred Rendering – Roy Triesscheijn updated Catalin Zima’s Tutorial to XNA 4.0/ (also, check out my blog post here)
  • Deferred Engine for MonoGame - a deferred engine created with MonoGame by Kosmonaut Games
  • Project Vanquish - a deferred rendering engine, extending on Catalin Zima's deferred engine (check out the video of it in action) 




  • God Rays & Volumetric Lighting 
  • 2D Crepuscular (God) Rays - learn how to implement God rays in this tutorial by Charles Humphrey (MonoGame version)
  • Light Shaft Rendering - an implementation of light shaft rendering in XNA with custom HLSL shaders by Luke Thatcher
  • Volumetric Lighting - check out this awesome tutorial on volumetric lighting (or Crepescular Rays, Light Shafts or God Rays) by Nicolas Menzel
  • Light Shafts - this is a port of the volumetric lighting tutorial by Nicolas Menzel to MonoGame


  • digitalerr0r XNA 4.0 Shader ProgrammingTutorials
  • 1. Ambient Light - an introduction to HLSL shader programming in XNA 4.0
  • 2. Diffuse Light - second tutorial explaining how to implement diffuse lighting
  • 3. Specular Light - learn how to implement specular lighting in this third tutorial
  • 4. Normal Mapping - learn how to implement normal mapping in this fourth tutorial
  • 5. Deform Shader - learn how to create a pure vertex shader for deforming objects
  • 6. Simple Ocean - learn how to create an ocean shader 


Texture Mapping Techniques 


Reflection 


Plants & Vegetation


Terrain & Heightmap
  • Generated Geometry - learn how 3D models can be generated by code during the build process
  • Multitexturing - learn how to attach different textures according to the height level of each vertex
  • Multi-Textured Terrain - a simple yet fast GPU-driven terrain multi-texturing approach
  • Terrain Texturing Demo - learn how to demonstrate procedural terrain texturing using 4 textures and a heightmap
  • Terrain Lighting - add normals to a terrain
  • Terrain Normal Mapping Demo - learn how to extend the Terrain Texturing Demo by adding tangent space normal mapping
  • Landscape Modeling - Game Creation with XNA/3D Development/Landscape Modelling
  • Steepness - an article which explains how to detect the area of steep slopes
  • Osiris - a GeoMipMapping Terrain Processor created by Tim Jones
  • Large Terrain
  • Quadtree Terrain - created by George Kristainsen, this program is a dynamic quadtree terrain used to render very large-scale worlds. Also, take a look at this article which explains the algorithm in-depth. For a similar terrain system which uses chunks, check out his chunked-terrain program. Also, check out magrathea to see his adaptive terrain algorithm applied to full-scale planets 
  • Chunked-Terrain - created by George Kristainsen, this is a C#/ MonoGame program demonstrating a dynamic, unlimited, procedural terrain demo which can be used to render very large-scale worlds. 
  • Magrathea - created by George Kristainsen, this program is an open-source dynamic, prodecural 3D full-scale planet demo. Its a scaled up adaption of the Quadtree Terrain project. 
  • Genesis Engine - created by Eric Lee, this is an open-source experiment with procedurally-generated worlds in XNA/ MonoGame from the ground level all the way out into space. 


Water 
  • Dynamic 2D Water - make a splash effect with dynamic 2D water effects in this tutorial by Michael Hoffman
  • Dynamic Water Pixel Shader - a fairly advanced water shader tutorial for MonoGame or XNA by Alien Scribble based off Michael Hoffman's 2D water splash tutorial 
  • XNA 4.0 Water - Learn how to create water with reflection for your games. The original source code was written in XNA 3.0 by David Mariscal Fernandez. It was updated to XNA 3.1 by Canton Javier Ferrero and I have successfully updated it to XNA 4.0. For more information, see my blog post here. Enjoy!
  • HLSL: Water Shader - a water shader created in XNA by Dmitry Timofeev (video)
  • Ocean Scene - check out this water shader by Kosmonaut Games
  • Water Flow in Portal 2 - by Donghyun Kim



Shadows



Skybox & Clouds
  • Skybox - learn how to add a skybox to your game
  • Volumetric Clouds - Learn how to implement volumetric clouds in XNA 4.0 in this tutorial by Charles Humphrey. You can find his original code base here


Snow 


Decals 




ANIMATION 

2D Animation
  • MeoMotion - a great 2D animator for creating smooth distortable animations created by Jason White (see more here)
  • ToonBoom - a great article on loading ToonBoom animations in XNA
  • 2D Skeletal Animations - an awesome sample on 2D animation



3D Animation

Motion-Capture 




PHYSICS

2D Physics

3D Physics
  • DigitalRune Physics –  A module from DigitalRune Engine - Physics with lots of features, (fast)
  • Bepu Physics – Nice Physics engine with many features, (fast,  FREE) (blog) (forum) (FAQ)
  • BEPU Physics MG - This is a MonoGame 3.4+ version of the 1.4 verison of BEPU Physics.
  • Also, check out my blog posts here on BEPU.  
  • BEPU Physics V1.5.0 - MonoGame port of BEPU physics 
  • BEPUik v0.3.0 - 64 bit Blender builds with the latest BEPUik full body inverse kinematics addon
  • Bubble Physics - soft-body physics engine for XNA
  • Jitter Physics –  A real-time Physics Engine for .NET created by the author of JigLibX  (fast,  FREE) The Google Code Archive can be found here
  • Oops! Framework - fast on the PC and Xbox 360 (good, but needs more features)
  • Matali Physics -fast with lots of potential (fast on PC, average on Xbox 360, $130 – $260)
  • Henge 3D Physics – Lot of Features and multi-threaded (okay on PC, slow on Xbox 360, FREE)
  • JigLibX – a C# port of the C++ JigLib physics engine, formerly known as JiggleX. Initially its not multi-threaded and runs slow however its FREE. Many developers recommend using Jitter instead. You can download the XNA 4.0 version of JigLibX here
  • Also, check out my blog posts here on ways I improved the JigLibX physics engine. Also, see Nikescar' vehicle class modifications
  • Bullet for XNA - loaded with features (slow on PC and Xbox 360) The physics library of the Visual3D.NET game engine is based on an early version of BulletX
  • Soft Body Physics in XNA - cloth, chains, slinky (awesome tutorial and samples)
  • XNA Havok - XnaHavok is simple wrapper for Havok SDK for use in XNA 
  • Vectors & Matrices - basic facts about vector and matrix algebra when developing 3D games
  • MonoCollision Framework - a triangle sphere collision framework for MonoGame 


     

AUDIO 

  • 3D Audio - learn how to position sounds in 3D space 
  • Dynamic Audio - learn about the audio features to the XNA Sound Effect API
  • EasyXnaAudio – easy interface to load, play, and manage songs and sounds
  • XNA Final Engine – Audio engine included in framework
  • Microphone Echo - learn how to play back recorded sound with an echo effect applied to it
  • Audacity - a free multi-track audio editor and recorder
  • Sound Lab - a collection of more than 170 free audio files for use in your games
  • Sound & Music - learn the basics on sound and music for games on Windows Phone
  • Playing Sound Effects - learn the aspects of audio programming as well as using XACT
  • Scratchy Audio Fix - learn how to fix playing the same sound effect at a high rate


Music
  • Music Management - meet the requirements around music playback in Windows Phone games in order to be accepted into the Windows Phone Marketplace
  • One-line Algorithmic Music - learn how to generate a sound clip through a line of code by David Gouveia

  • Creating a Basic Synth by David Gouveia
  • Part 1 - introduces the reader to the world of sound synthesis with XNA 4.0 and cover some of the basic theory that should be understood before proceeding
  • Part 2 -  introduces the DynamicSoundEffectInstance class present in the XNA 4.0 framework and how it can be used to play some simple waveforms. By the end of part II you should be able to create and reproduce a single waveform of different kinds (such as a sine wave, sawtooth wave, pulse wave and square wave).
  • Part 3 - guides the reader through the construction of a Synth class that allows the application to communicate with the low-level audio playback engine through a much simpler, music-oriented interface. The class will also be flexible enough for new sounds to be created and swapped easily. By the end of part II you should be able to play many musical notes simultaneously, while controlling their individual pitch, duration, volume and panning. You should also be able to create entirely new sounds and use them with minimal changes to the code.



ARTIFICIAL INTELLIGENCE (AI)

Aiming
  • Aiming - learn how to turn one object to face another

Steering Behaviors


  • Path-finding
  • Pathfinding - learn how AIs can navigate using three routines
  • Bing Maps with Pathfinding - This sample expands on the Bing Maps sample capabilities by combining the Pathfinding sample to enable the tank to drive to markers around the screen by using the streets on the map.
  • Sick Kreations - C# Port of Recast/ Detour Navigation Mesh created by Sick Kreations based on this 
  • Navigation Mesh Pathfinding - a great blog post by John C. Brown on pathfinding
  • AStarPathfinding - A-Star Pathfinding Sample Application created by Ben Scharbach


State Machine


Behavior Types & Decisions 
  • Chase & Evade - learn how to implement several simple AI behaviors
  • Fuzzy Logic - learn how to create AI that makes decisions

  • Flocking 
  • Flocking - learn how AIs use simple rules to move together

  • Engine Nine – has Path Finding and steering behaviors included
  • SharpSteer – I found a million and 1 uses for this…
  • AI in Games - from Game Creations With XNA
  • Intro to Finite State Machines - learn about finite state machines in this post by Jesús Bosch
  • AIGameDev.com - a community of game developers focusing on artificial intelligence, ran by experts in the field
  • AI Game Programmers Guild
  • GameDev.net - a collection of recommended AI Books and Sites (great for getting started)
  • GOAP - Goal-Oriented Action Planning
  • Botman's Bots - the bots used in Counter Strike
  • AI in FPS Games - some insight in this presentation
  • XGAE - (XNA Genuine Artificial Intelligence Engine) a port from C++ to C# of the artificial intelligence engine FEAR for XNA
  • Digesting Duck - a blog about AI and Prototyping 
  • AiGameDev.com
  • Diabolical - blog posts by John C. Brown on the artificial intelligence in his sci-fi action game 



PARTICLES

2D Particles 

3D Particles



INPUT & STORAGE

  • EasyStorage - the easiest way to save games, store date, etc... (tutorial here by Robot Foot Games) Check it out on github for the latest updates
  • GamePad - This is a helper for simplified access to gamepad controllers modeled after the XNA Game Studio 4 (Microsoft.XNA.Framework.Input) GamePad class
  • XNAInput - nice library to handle input controls 
  • XNA Input Handlers - library to handle mouse and keyboard input
  • CS_XboxOneController - use C# and XNA to get Xbox One or 360 controller input
  • Otaku Controller - this is a simple program simulation PC mouse with an Xbox 360 or Xbox One controller 
  • Input Sequence - learn how to detect sequences of input such as combo series, cheat codes, and other multi-button functions
  • Keyboard Input Scope Sample - learn how to change the input scope of the on-screen keyboard to one of the many built-in options on Windows Phone
  • WP7 Saving/ Loading - a tutorial on saving and loading for windows phone based games
  • Joystick - learn how to get a joystick working in XNA 4.0
  • Access an Xbox 360 Joystick - an excellent tutorial created by Joel Ivory Johnson
  • PlusPad - learn how to simulate keyboard and mouse input with a Xbox 360 gamepad
  • WebCamXNA - learn how to use a webcam in XNA



GRAPHICAL USER INTERFACES (GUI) / LEVEL EDITOR TOOLS

  • DigitalRune Game UI – Basically Neoforce Controls on steroids, part of  the Digital Rune Engine
  • Neoforce Controls - my 1st Favorite tool for Interfaces and open source (Also on GitHub) (Check out the monogame version
  • MonoForce - an improved MonoGame based version of Neoforce Controls 
  • XNA Interface Elements - my 2nd Favorite tool for Interfaces
  • Nuclex Framework- skinnable interface included
  • 3D XNA Gizmo- you may need this for level editing (MonoGame Source)
  • XNA and Windows Forms – this article explains the best
  • XNA Integration Inside WPF - another way to integrate multiple XNA scenes inside WPF
  • Gemini - a WPF framework designed specifically for building IDE-like applications
  • RandomchaosMGUI - an open-source MonoGame user interface created by Charles Humphrey 
  • GLEED2D - a 2D level editor for your XNA games (XNA 4.0 version)
  • XNA LED - a C# level editor created in XNA using xWinForms (has lots of potential)
  • tIDE - This a full-featured .NET based tile map editor using XNA 3.1 and 4.0 technology. The editors supports multiple layers (WYSIWYG parallax), tile animation and custom properties at map, layer, tile sheet and individual tile level. The editors works in tandem with xTile, an XNA-ready tile rendering engine. (click here for a quick tutorial for integrating xTile within an XNA game project) (Source Code) Automatic tile transitioning (autotiling algorithm described here)
  • World of Goo: Cursor - the shape and behavior of the mouse cursor
  • Pie Menu - a circular context menu where selection depends on direction
  • 3D Game Editor - This is a 3D game editor created in MonoGame by Nate Bowman

  • Character Interaction & Gameplay
  • Mass Effect: Dialogue - looks and behaves like the dialogue system and wheel in Mass Effect
  • 2D Pie Drawing - a useful pie for 2D game effects, such as enemy area visibility, flashlights and radars



GAME STATE MANAGEMENT

  • Xna Screen Manager – clean, simple and easy to use
  • Oops! Framework - has a game state manager included
  • Nuclex Framework – game manager included (nicely done)
  • The State of Things - learn how to use state to create game menus, display game screens and make your game characters come alive!
  • GameStateManager – a great starter  to learn how to build your own game menu system. Learn how to manage transitions among menus and gameplay states 
  • Multiple Columns - learn how to add multiple columns to the Game State Management Sample by adding left and right movement to your menus
  • MonoGame-UI Sample - a UI sample created by Fit Games using the game state management project
  • Splash-Screen - learn how to create a splash screen for your menu system (also be sure to check out my blog post here)
  • User Interface Controls - learn how to build on the Game State Management sample adding user interface elements with a look and feel 
  • Dynamic Menu - learn how to develop a dynamic user interface that can be created in code or in XML, or a combination of both
  • Handle Multiple Controllers - learn how to handle multiple player controllers in your games
  • RPG Starter Kit - comes equipped with a Level Manager



NETWORKING

  • Network Prediction - learn how to use prediction and smoothing algorithms to compensate for network lag
  • Network Lobby & Chat Icons - a free set of images designed for displaying status within a networking game
  • Network Game State Management - learn how to implement the user interface for a multiplayer networked game
  • Network Architecture: Client / Server - learn how to implement a simple multiplayer network session by using a client/server network topology
  • Network Architecture: Peer 2 Peer - learn how to implement a simple multiplayer network session by use P2P network topology in which each computer is responsible for updating the state of its locally controlled players
  • Invites - this sample builds on the Peer 2 Peer sample by adding support for invites 
  • Net Rumble - a 2D shooter where up to sixteen players compete online in a death match
  • Picking - learn how to determine whether a player's cursor is over an object and how to find out where on the screen the object it. This sample could be helpful for drawing text above a player's head if you want to display the name of players over their characters in online matches. Doing so helps players identify each other.  
  • Network Engines - other useful networking resources
  • Making Networked Games - check out this helpful PDF by Shawn Hargreaves 
  • No Membership Error - this post by John Pile Jr explains how to test XNA networking using a SystemLink without any difficulties 

  • Lidgren
  • Lidgren.Network - a networking library for the .net framework which uses a single udp socket to deliver a simple API for connecting a client to a server, reading and sending messages
  • An Intro to Lidgren - an article introducing networking in C# games using Lidgren
  • How to: Lidgren Network - an example on how to use the lidgren networking library
  • Lidgren P2P - an article explaining how to implement Peer to Peer networking using Lidgren 




MULTI-THREADING




CONTENT IMPORTERS & PIPELINE EXTENSIONS
  
  • 3DS, OBJ, and NFF - three content importers for XNA content pipeline extensions
  • Custom Model Importer - learn how to implement a custom model importer in XNA
  • Custom Model Class - learn how to go beyond the limits of the Model class that comes built in to the XNA Framework
  • Tiff Importer - learn how to create a Tiff content importer besides the default XNA images
  • ColladaXNA - learn how to create an importer for animated collada 3d models (see more here and more about loading and rendering collada models here) (Git)
  • StichUp - an XNA 4.0 content pipeline extension which implements the idea of Shawn Hargreave's article Generating Shaders From HLSL Fragments (See an Introduction to StitchUp here)
  • Osiris - a set of XNA 4.0 content pipeline extensions 
  • Weaver - an HLSL surface shader parser, implemented as a content pipeline extension for XNA/ MonoGame
  • XBuilder - This lets you preview your content assets right in Visual Studio
    (See more here and version 0.2)
  • Xamarin Asset Previewer - lets you preview various MonoGame/ UrhoSharp assets in the IDE
  • Compiled XNB Content Format - learn how to load .xnb files into a programming environment other than XNA / .NET



GARBAGE COLLECTION & PERFORMANCE 





STARTER KITS & OPEN SOURCE GAMES  

Starter Kits 

Open Source Games




USEFUL EXTRAS AND SERVICES

Fonts 
  • Font Squirrel –  need Free Commercial-Use Fonts for your game?


Art 


Textures



Sound Effects


Music 
  • HyperDuck Music Studios – need custom music for your game?
  • The Spin Wires - Need free instrumental tracks for use in your games, videos and other media. Check out this site here. The Spin Wires are a Punk/ Dance Rock band from Buffalo, NY. They embody the best elements of bands like Franz Ferdinand, The Black Keys and The Arctic Monkeys. If you use their tracks, please give them credit! 
  • ccmixter -  Royalty free music you can use in your games (check the licenses for how to credit people)
  • FL Studio Cookbook - learn how to make your own style of songs with Fruity Loop Studio



More


Articles, Blogs, Tips and Tutorials



Not XNA Exclusive Articles, but Handy

     

XNA 4.0 & MonoGame Books

     

Are you trying to convert XNA 3.1 projects to XNA 4.0?



*Most of the articles above are from Shawn Hargreaves Blog, posted here to make 
them easier to find.


Sites that promote and review Xbox Indie Games

       If there are any resources you would like to share or see added to the XNA Developer's Survival Kit, go to the Contact page to reach me. Also, if you have found this page helpful, please comment on my blog post.