<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-15865071</id><updated>2012-01-29T21:25:58.289-08:00</updated><category term='C++'/><category term='two thumbs'/><category term='QT'/><category term='android'/><category term='Tools and Utilities'/><category term='Graphics Programming refresher'/><category term='doxygen'/><category term='Shell Replacement'/><category term='Perforce'/><category term='Cygwin'/><category term='coding'/><category term='Dev Studio'/><category term='macros'/><category term='Debugging'/><category term='CSharp'/><category term='DirectX 11'/><category term='blogging'/><category term='Ogre'/><category term='OpenGL'/><category term='Utilities'/><category term='GUI'/><title type='text'>The Wandering Coder</title><subtitle type='html'>Idle ramblings and code snippets.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>67</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-15865071.post-3665573418149759568</id><published>2012-01-29T21:25:00.001-08:00</published><updated>2012-01-29T21:25:58.311-08:00</updated><title type='text'>Settling into the Edmonton Way of life</title><content type='html'>&lt;p&gt;OK, so maybe that's a bit premature. &amp;nbsp;The house is still a shamble, boxes are everywhere, it's Sunday night at 10:00 but dammit, I have a home office all set up again.&lt;/p&gt;&lt;p&gt;Those of you that have been following me (probably not many since my last post was ... well, let's just say that it was a while ago) know that I tend to be a bit sporadic in my posts. &amp;nbsp;I've also said in the past that I'm going to try and be a bit more prolific. &amp;nbsp;Well, with it being a new year and all that, time to see what I can do.&lt;/p&gt;&lt;p&gt;So, what's gone on in the last little bit. &amp;nbsp;I've spent time in Toronto, Canada's answer to New York (apologies to New York), did my bit at Ubisoft Toronto (hey guys!) and I'm now back west-ish in Alberta. &amp;nbsp;Edmonton to be specific. &amp;nbsp;Bioware Edmonton, to be very specific.&lt;/p&gt;&lt;p&gt;See, it's a long tale. &amp;nbsp;One involving friends from way back (GTez, you know who you are) and several attempts to get me out here over the period of five years. &amp;nbsp;In all honesty, I was starting to feel a little stagnant and needed a change.&lt;/p&gt;&lt;p&gt;Edmonton is good. &amp;nbsp;Surprisingly so. &amp;nbsp;As in "The family mostly likes it here". &amp;nbsp;The missus is very surprised at how much she likes it. &amp;nbsp;Even though we're constantly saying "you know, it's cold, but it's not *that* cold" (trust me, -27 in Toronto is very, VERY different than -27 here).&lt;/p&gt;&lt;p&gt;From my standpoint, work is very good as well. &amp;nbsp;No more 4 hour daily commutes. &amp;nbsp;Seriously. &amp;nbsp;My daily commute now is under 30 minutes. I have a shockingly large amount of free time on my hands now.&lt;/p&gt;&lt;p&gt;That's where this blog comes into play. &amp;nbsp;I now see that I have time again to put towards this little endeavour. &amp;nbsp;And I think I'm going to run with it.&lt;/p&gt;&lt;p&gt;I'm going to continue on with my investigation into DX11, but I also think I'm going to play around with some other ideas too.&lt;/p&gt;&lt;p&gt;So, with that, I hope to see you all soon! &amp;nbsp;And Happy New Year!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-3665573418149759568?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/3665573418149759568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=3665573418149759568' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/3665573418149759568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/3665573418149759568'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2012/01/settling-into-edmonton-way-of-life.html' title='Settling into the Edmonton Way of life'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-2669689363362824198</id><published>2011-09-18T11:59:00.001-07:00</published><updated>2011-09-18T12:22:52.790-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Graphics Programming refresher'/><category scheme='http://www.blogger.com/atom/ns#' term='DirectX 11'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Walking The Graphics Pipeline - Part 1</title><content type='html'>&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;There once was a time, many, many years ago that I was very, very versed in the language of rendering programmers.&amp;nbsp; That was many moons ago (talking 2004 here … pre DirectX 9b days).&amp;nbsp; I’ve only been marginally keeping up, so when people talk about deferred renderers, I know what they’re talking about &lt;i&gt;from a purely theoretical level&lt;/i&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;I’m tired of only understanding it from a theoretical level.&amp;nbsp; So I’m going to be taking the next couple of months to get my chops up to snuff.&amp;nbsp; And I thought I’d take you all along for the ride.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;I’m going to be focusing on DirectX 11 for the majority of these articles.&amp;nbsp; It’s new and whiz-bangy.&amp;nbsp; It’s not particularly useful when it comes to things like Xbox development, but it is the ‘next’ gen api.&amp;nbsp; I’m also not going to talk about OpenGL here, simply because I want to keep my focus on one thing.&amp;nbsp; I will probably approach OpenGL in a later post.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;So, where to start?&amp;nbsp; I’m tempted to use the DirectX sample framework as it gives us a *lot* to work with.&amp;nbsp; I’m not going to use their wrapper for DirectX, as that defeats the purpose of this exercise. As well, all dev will be running in both x86 and x64 modes.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;For now, this will be a simple Windows app.&amp;nbsp; Nothing fancy here.&amp;nbsp; So, putting a window up on screen looks like this, in straight C/C++:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;code goes="" here=""&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;code goes="" here=""&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;  &lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
&lt;div style="text-align: justify;"&gt;
&lt;code goes="" here=""&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;pre class="brush: cpp"&gt;// wtgp_01.cpp : An simple application base.
// We are doing nothing at this point in time aside from
// displaying a window.
//  x86 and x64 support.
//

#include "stdafx.h"

HINSTANCE	g_hInst = NULL;
HWND		g_hWnd	= NULL;

//==============================================
// TODO:
//   Eventually move this off into a separate utility library
//   We output any caught memory leaks here.
#if defined(DEBUG) || defined(_DEBUG)
#include "crtdbg.h"
#endif
//==============================================

#include "wtgp_01.h"

//--------------------------------------------------------------------------------------
// Forward declarations
//--------------------------------------------------------------------------------------
HRESULT InitWindow( HINSTANCE _instance, int _cmdShow );
LRESULT CALLBACK    WndProc( HWND, UINT, WPARAM, LPARAM );

int APIENTRY _tWinMain(HINSTANCE _instance, HINSTANCE _prevInstance, LPTSTR _cmdLine, int _cmdShow)
{
	UNREFERENCED_PARAMETER(_prevInstance);
	UNREFERENCED_PARAMETER(_cmdLine);

	// Enable run-time memory check for debug builds.
	// Again, this should live in a separate library
#if defined(DEBUG) | defined(_DEBUG)
	_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
#endif

	if( FAILED( InitWindow( _instance, _cmdShow ) ) )
	{
		return 0;
	}

	// Main message loop
	MSG msg = {0};
	while( WM_QUIT != msg.message )
	{
		if( PeekMessage( &amp;amp;msg, NULL, 0, 0, PM_REMOVE ) )
		{
			TranslateMessage( &amp;amp;msg );
			DispatchMessage( &amp;amp;msg );
		}
	}

	return ( int )msg.wParam;
}

//--------------------------------------------------------------------------------------
// Register class and create window
//--------------------------------------------------------------------------------------
HRESULT InitWindow( HINSTANCE _instance, int _cmdShow )
{
	// Register class
	WNDCLASSEX wcex;
	wcex.cbSize = sizeof( WNDCLASSEX );
	wcex.style = CS_HREDRAW | CS_VREDRAW;
	wcex.lpfnWndProc = WndProc;
	wcex.cbClsExtra = 0;
	wcex.cbWndExtra = 0;
	wcex.hInstance = _instance;
	wcex.hIcon = LoadIcon( _instance, ( LPCTSTR )IDI_WTGP_01 );
	wcex.hCursor = LoadCursor( NULL, IDC_ARROW );
	wcex.hbrBackground = ( HBRUSH )( COLOR_WINDOW + 1 );
	wcex.lpszMenuName = NULL;
	wcex.lpszClassName = L"WTGTP_01";
	wcex.hIconSm = LoadIcon( wcex.hInstance, ( LPCTSTR )IDI_WTGP_01 );
	if( !RegisterClassEx( &amp;amp;wcex ) )
	{
		return E_FAIL;
	}

	// Create window
	g_hInst = _instance;
	RECT rc = { 0, 0, 800, 600 };
	AdjustWindowRect( &amp;amp;rc, WS_OVERLAPPEDWINDOW, FALSE );
	g_hWnd = CreateWindow( L"WTGTP_01", L"Walking The Graphics Pipeline - 01", WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left, rc.bottom - rc.top, NULL, NULL, _instance,
		NULL );
	if( !g_hWnd )
	{
		return E_FAIL;
	}

	ShowWindow( g_hWnd, _cmdShow );

	return S_OK;
}


//--------------------------------------------------------------------------------------
// Called every time the application receives a message
//--------------------------------------------------------------------------------------
LRESULT CALLBACK WndProc( HWND _hWnd, UINT _msg, WPARAM _wParam, LPARAM _lParam )
{
	PAINTSTRUCT ps;
	HDC hdc;

	switch( _msg )
	{
	case WM_PAINT:
		hdc = BeginPaint( _hWnd, &amp;amp;ps );
		EndPaint( _hWnd, &amp;amp;ps );
		break;

	case WM_DESTROY:
		PostQuitMessage( 0 );
		break;

	default:
		return DefWindowProc( _hWnd, _msg, _wParam, _lParam );
	}

	return 0;
}
&lt;/pre&gt;
&lt;code goes="" here=""&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code goes="" here=""&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;Simple straightforward Win32/64 app.&amp;nbsp; Nothing extravagant in it, but it’s a plain-jane starting point. Where I’ve spent most of my time on this so far is just setting up the project to put all the resultant and intermediate files into to the correct locations.&amp;nbsp; This isn’t hard to do, it just takes a while to set up right.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code goes="" here=""&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code goes="" here=""&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;As it now stands, all binary files (exes, compiled media files, etc) will live in a ‘bin’ folder at the same level as the solution.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-pCJgKzhtl2U/TnZEn8P5grI/AAAAAAAAB6M/fZQ068mV1GE/s1600/FileLocations_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-pCJgKzhtl2U/TnZEn8P5grI/AAAAAAAAB6M/fZQ068mV1GE/s1600/FileLocations_01.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;code goes="" here=""&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code goes="" here=""&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;Inside of each project, there will be a ‘tmp’ folder where all temporary files (obj, manifest, build logs) will go.&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/code&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-Yi1dE9lKL08/TnZErGkk6_I/AAAAAAAAB6Q/69zENQY6LFw/s1600/FileLocations_02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-Yi1dE9lKL08/TnZErGkk6_I/AAAAAAAAB6Q/69zENQY6LFw/s1600/FileLocations_02.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;code goes="" here=""&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code goes="" here=""&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;For your convenience, I've uploaded the source to the project here:&amp;nbsp;&lt;a href="https://sites.google.com/site/ashmatheson02/wtgp-build_001.rar?attredirects=0&amp;amp;d=1"&gt;wtgp-build_001.rar&lt;/a&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code goes="" here=""&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code goes="" here=""&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;Shortly, I'll be adding some actual graphics to this project. &amp;nbsp;Stay tuned!&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;code goes="" here=""&gt; &lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-2669689363362824198?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/2669689363362824198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=2669689363362824198' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/2669689363362824198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/2669689363362824198'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2011/09/walking-graphics-pipeline-part-1.html' title='Walking The Graphics Pipeline - Part 1'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-pCJgKzhtl2U/TnZEn8P5grI/AAAAAAAAB6M/fZQ068mV1GE/s72-c/FileLocations_01.png' height='72' width='72'/><thr:total>0</thr:total><georss:featurename>5-35 Forestside Ct, Richmond Hill, ON L4C 9T9, Canada</georss:featurename><georss:point>43.892758820243024 -79.43432807922363</georss:point><georss:box>43.887037320243024 -79.44419857922364 43.898480320243024 -79.42445757922363</georss:box></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-2244285285190961596</id><published>2011-04-30T20:44:00.000-07:00</published><updated>2011-04-30T20:44:55.067-07:00</updated><title type='text'>New Computer time</title><content type='html'>My Dad is one of the most awesome people around.  After the move to Toronto, the movers completely wrecked my home computer.  So, for the last little bit I've been without a computer (the funds from insurance weren't enough to actually replace the computer).&lt;br /&gt;
&lt;br /&gt;
However, that's no longer the case.  Awesomeness prevails:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-tKSYar2POtI/TbzWfoQZd9I/AAAAAAAABhs/9Hubk3--xX8/s1600/DSCN0978.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://2.bp.blogspot.com/-tKSYar2POtI/TbzWfoQZd9I/AAAAAAAABhs/9Hubk3--xX8/s640/DSCN0978.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;Yep! &amp;nbsp;That's a new laptop sitting in my home studio. Additionally, I took the hardly used Sony TV and made it my Main monitor.&lt;br /&gt;
&lt;br /&gt;
Surprisingly enough, it's like having a wall of monitor to look at. &amp;nbsp;And at 1080p, it's actually really easy to work with. &amp;nbsp;Not actually sure how I'm going to go back to work on Monday and look at a 17" monitor again.&lt;br /&gt;
&lt;br /&gt;
Oh, and hopefully a bunch of new posts should be coming in shortly! &amp;nbsp;Stay tuned.&lt;br /&gt;
&lt;br /&gt;
-Ash&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-2244285285190961596?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/2244285285190961596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=2244285285190961596' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/2244285285190961596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/2244285285190961596'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2011/04/new-computer-time.html' title='New Computer time'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-tKSYar2POtI/TbzWfoQZd9I/AAAAAAAABhs/9Hubk3--xX8/s72-c/DSCN0978.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-2502018548934063141</id><published>2011-03-13T04:41:00.005-07:00</published><updated>2011-03-13T04:51:56.052-07:00</updated><title type='text'>Custom Build sounds in Dev Studio 2008</title><content type='html'>Matthieu St. Pierre, one of the rendering coders at work, forwarded this to me at work.  So I thought I'd share.  It's a sweet piece of code that allows you to customize your build results to play a custom sound when your build is a success or when it fails. It's pretty damn cool and completely open to customization.  So without further ado:

&lt;ol&gt;
&lt;li&gt;Open up Tools | Macro | Macro IDE menu item&lt;/li&gt;
&lt;li&gt;Double-click the “MyMacros” project in the Project Explorer, and double-click the “EnvironmentEvents” item to show that module&lt;/li&gt;
&lt;li&gt;Copy and paste the code below into the macro editor window&lt;/li&gt;
&lt;li&gt;Put it right above the End Module declaration&lt;/li&gt;
&lt;li&gt;Once you have added the code, save the module and try to build something. If you don't hear anything, you may not have any sounds defined for the “Build Failed” and “Build Succeeded” events in the “Sounds and Audio Devices Properties” control panel.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="brush: vb"&gt;   
Public bBuildErr As Boolean = False
Public iCnt As Integer = 0

' The DLL Import that plays the sounds
Declare Function sndPlaySound Lib "winmm.dll" _
   Alias "sndPlaySoundA" (ByVal lpszSoundName As String, _
   ByVal uFlags As Long) As Long

' A convenience method to play the sound
Private Sub PlaySound(ByVal sSoundFile As String)
   'Play async, ignore file not found
   sndPlaySound(sSoundFile, &amp;amp;H1 Or &amp;amp;H2 Or &amp;amp;H20000)
End Sub

Private Sub BuildEvents_OnBuildDone(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildDone
   Dim sSound As String

   If iCnt &gt; 0 Then
       If bBuildErr Then
           sSound = My.Computer.Registry.GetValue( _
               "HKEY_CURRENT_USER\AppEvents\Schemes\Apps\devenv\VS_BuildFailed\.current", _
               "", "").ToString()
       Else
           sSound = My.Computer.Registry.GetValue( _
               "HKEY_CURRENT_USER\AppEvents\Schemes\Apps\devenv\VS_BuildSucceeded\.current", _
               "", "").ToString()
       End If
       PlaySound(sSound)
   End If
   bBuildErr = False
   iCnt = 0
End Sub

Private Sub BuildEvents_OnBuildProjConfigDone(ByVal Project As String, _
                                       ByVal ProjectConfig As String, ByVal Platform As String, ByVal SolutionConfig As String, _
                                       ByVal Success As Boolean) Handles BuildEvents.OnBuildProjConfigDone
   iCnt += 1
   If Not Success Then
       bBuildErr = True
   End If
End Sub
&lt;/pre&gt;

That's it!  Simple and easy to install and use.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-2502018548934063141?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/2502018548934063141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=2502018548934063141' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/2502018548934063141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/2502018548934063141'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2011/03/custom-build-sounds-in-dev-studio-2008.html' title='Custom Build sounds in Dev Studio 2008'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-3268109504451477486</id><published>2010-12-08T03:27:00.007-08:00</published><updated>2010-12-08T03:50:29.375-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debugging'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenGL'/><title type='text'>An Unfortunate Side Effect ...</title><content type='html'>Looks like another middleware provider is running into some hard times.  &lt;a href="http://www.gremedy.com/"&gt;http://www.gremedy.com/&lt;/a&gt; looks to be having problems. That being said, it looks like they are releasing their gDEBugger tool for free: &lt;a href="http://www.gremedy.com/purchase.php"&gt;http://www.gremedy.com/purchase.php&lt;/a&gt;

&lt;p&gt;

If you're doing any OpenGL programming, this is a nice tool to add to your stable!

&lt;p&gt;

FYI: If you're having troubles installing the license key, simply unarchive it, install gDEBugger and then double click on the license file. You should then see the license manager.  Save and you're good to go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-3268109504451477486?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.gremedy.com/' title='An Unfortunate Side Effect ...'/><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/3268109504451477486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=3268109504451477486' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/3268109504451477486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/3268109504451477486'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2010/12/unfortunate-side-effect.html' title='An Unfortunate Side Effect ...'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-4744839113815573380</id><published>2010-11-28T05:00:00.000-08:00</published><updated>2010-11-28T05:00:13.126-08:00</updated><title type='text'>OpenGL + C#</title><content type='html'>Today's goal is to try and mix OpenGL and C# together and see what I can come up with.&lt;br /&gt;
&lt;br /&gt;
One of the projects I've got on the burner may possibly be multi-platform.  And I'd really like to try to do it using C# (Mono on other platforms).  DirectX is pretty much out the window in that case (especially if I want to go Mac).&lt;br /&gt;
&lt;br /&gt;
So I'm giving C# and OpenGL (via &lt;a href="http://www.opentk.com/"&gt;OpenTK&lt;/a&gt;) a go.  Will probably do a write up in the next couple of days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-4744839113815573380?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/4744839113815573380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=4744839113815573380' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/4744839113815573380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/4744839113815573380'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2010/11/opengl-c.html' title='OpenGL + C#'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-8195929547487719809</id><published>2010-11-26T17:25:00.000-08:00</published><updated>2010-11-26T17:25:08.358-08:00</updated><title type='text'>I'm not dead!  Really!</title><content type='html'>The new gig is taking a up a lot of my spare time, so I don't have as much as I used to.  So updates will probably be more sporadic than in the past.&lt;br /&gt;
&lt;br /&gt;
Additionally, the movers wrecked my home box.  Wrecked as in "Throw away because it's not usable anymore".  And I really don't have the cash on hand to build a new one.  So the missus and I are sharing hers for the next little bit.&lt;br /&gt;
&lt;br /&gt;
However, I am planning on doing a little work on some side projects.  I'll be detailing them as time progresses.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-8195929547487719809?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/8195929547487719809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=8195929547487719809' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/8195929547487719809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/8195929547487719809'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2010/11/im-not-dead-really.html' title='I&apos;m not dead!  Really!'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-266829754852376055</id><published>2010-06-25T22:57:00.001-07:00</published><updated>2010-06-26T08:39:40.070-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perforce'/><category scheme='http://www.blogger.com/atom/ns#' term='CSharp'/><category scheme='http://www.blogger.com/atom/ns#' term='GUI'/><title type='text'>Graphical P4 Login</title><content type='html'>Today I ran into an interesting little problem.  Without going into too much detail (and too keep from getting my ass into trouble at work) I ran into a situation where it would be really nice to be able to log into P4 through a batch file.  The issue was, I didn't want to have to store an MD5 hash of a password, or a clear text version of the password on the client's machine.  What I &lt;b&gt;really&lt;/b&gt; wanted was a simple, GUI version of 'P4 login -a'.  But without the console based prompting for a user's password.  There are options for doing it, but none of them felt satisfactory to me. For those curious, options include:&lt;br /&gt;
&lt;br /&gt;
building a batch file that is essentially:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;script class="brush: vb" type="syntaxhighlighter"&gt;
&lt;![CDATA[
echo &lt;password&gt;| p4 login -a
]]&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
Not a fan of this method.&lt;br /&gt;
&lt;br /&gt;
Or storing an MD5 Hash and passing that through a la: &lt;a href="http://kb.perforce.com/UserTasks/ConfiguringP4/AvoidingTheP..rdInWindows"&gt;http://kb.perforce.com/UserTasks/ConfiguringP4/AvoidingTheP..rdInWindows&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
A google search came up empty.  This surprised me as I would have thought something like this would have been a common need. Who knew?&lt;br /&gt;
&lt;br /&gt;
So, I figured that I'd just write my own.  I mean, how hard can it be?  All you have to do is pass in the password on the command line, right?&lt;br /&gt;
&lt;br /&gt;
The other thing is that I want whatever app I create to be nearly stand-alone.  The only thing that it should rely on is P4.exe.  I don't want it to hook into the P4 API, or any other nonsense (being dependent on P4.exe is bad enough).&lt;br /&gt;
&lt;br /&gt;
Wrong.  P4 login doesn't work that way.  You can't pass in the password, it has to come through Standard Input.  Whut-oh.&lt;br /&gt;
&lt;br /&gt;
Well, it's not that bad, actually.  Using CSharp, it's just a matter of using the Process object and hooking into the StdInput.  Surprisingly easy, once you find it.&lt;br /&gt;
&lt;br /&gt;
The form is a simple layout.  I don't even ask for a username (easy enough for you, dear reader, to add).  But for my case, all I need is the password.  So a quick mock-up of the GUI would look like this:&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://sites.google.com/site/ashmatheson/Home/P4Login_Mockup.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://sites.google.com/site/ashmatheson/Home/P4Login_Mockup.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The Window Mockup&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
So, what's the code that does all this funky stuff?&lt;br /&gt;
&lt;br /&gt;
&lt;script class="brush: csharp" type="syntaxhighlighter"&gt;
&lt;![CDATA[
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;


namespace P4Login
{
    public partial class P4LoginFrm : Form
    {
        // These are the Win32 error code for file not found or access denied.
        private const int ERR_FILE_NOT_FOUND = 2;
        private const int ERR_DENIED_ACCESS = 5;

        public P4LoginFrm()
        {
            InitializeComponent();
        }

        private void Cancel_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void Login_Click(object sender, EventArgs e)
        {
            StreamWriter StdIn;
            Process P4Login = new Process();

            P4Login.StartInfo.RedirectStandardInput = true;
            P4Login.StartInfo.UseShellExecute = false;
            P4Login.StartInfo.FileName = "p4.exe";
            P4Login.StartInfo.Arguments = "login -a";

            try
            {
                P4Login.Start();

                StdIn = P4Login.StandardInput;

                StdIn.WriteLine(mtbPassword.Text);
                P4Login.WaitForExit();

                if (P4Login.ExitCode != 0)
                {
                    MessageBox.Show("Invalid Password!  Try again.", "Error!");
                    return;
                }
            }
            catch (Win32Exception excp)
            {
                if (excp.NativeErrorCode == ERR_FILE_NOT_FOUND)
                {
                    MessageBox.Show(excp.Message, "Ensure P4.exe is in your path");
                    return;
                }
                else if (excp.NativeErrorCode == ERR_DENIED_ACCESS)
                {
                    MessageBox.Show(excp.Message, "You do not have permission to access this file");
                    return;
                }
                else
                {
                    MessageBox.Show(excp.Message, "General Error");
                    return;
                }
            }

            
            // Successfull, close the window
            Close();
        }
    }
}
]]&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
Again, the big thing here is to use a streamwriter object as the redirection for STDIN. At that point, it a stream and you can do pretty much anything you want to.&lt;br /&gt;
&lt;br /&gt;
Additionally, I've archived the project.  You can access it &lt;a href="http://sites.google.com/site/ashmatheson/Home/P4Login.zip"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-266829754852376055?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/266829754852376055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=266829754852376055' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/266829754852376055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/266829754852376055'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2010/06/graphical-p4-login.html' title='Graphical P4 Login'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-7615274809846445948</id><published>2010-06-21T16:48:00.004-07:00</published><updated>2010-06-21T16:54:11.857-07:00</updated><title type='text'>Cheap debugging console</title><content type='html'>Something I keep forgetting and figured I'd put into my blog. If you're looking to add a cheap debug console to your app (just for spewing data) and you're a win32 app, this is a nice little code snippet:

&lt;pre class="brush: cpp"&gt;
#include "stdio.h"

// other window init code goes here

// sometime before the main message pump

// Create the debug window

if( AllocConsole() == true )
{
    freopen("CONOUT$", "wt", stdout);
    SetConsoleTitle(L"El-cheapo Debug Window");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED);
}

printf( "Debug Window Created!" );
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-7615274809846445948?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/7615274809846445948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=7615274809846445948' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/7615274809846445948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/7615274809846445948'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2010/06/cheap-debugging-console.html' title='Cheap debugging console'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-8399333369351016761</id><published>2010-05-07T19:09:00.001-07:00</published><updated>2010-05-07T19:10:48.026-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='two thumbs'/><category scheme='http://www.blogger.com/atom/ns#' term='blogging'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Blogging from my phone</title><content type='html'>&lt;br&gt;So, for a while now I've been wanting to blog my ideas and thoughts while commuting from home to work (and back). But I don't actually own a laptop (please note, latptop donations accepted)! So I've been looking for an alternative.&amp;#160; And I may have found one.&amp;#160; It's called 'Blogaway'. So far, it seems to be a decent enough client.
&lt;br&gt;Now, I wouldn't want to try and do any code based writing using it.&amp;#160; The keyboard on the Nexus One is good, but I'm not a thumb-typist.
&lt;br&gt;More work this weekend is planned for my 'FailDroid' app. I'd like to get it up on the marketplace soon, to try out my idea of super-cheap apps to see if that can be any kind of a revenue stream.
&lt;br&gt;So, my stop is next.&amp;#160; More cell-based blogging to come! &lt;br&gt;
&lt;b&gt;Location : &lt;/b&gt;&lt;a href="http://maps.google.com/maps?q=49.220234,-122.671238"&gt;Golden Ears Way, Pitt Meadows, BC V3Y, &lt;/a&gt;
&lt;br&gt;Posted via Blogaway
&lt;br&gt;&lt;b&gt;Location : &lt;/b&gt;&lt;a href="http://maps.google.com/maps?q=49.220234,-122.671238"&gt;Golden Ears Way, Pitt Meadows, BC V3Y, &lt;/a&gt;&lt;br&gt;&lt;br&gt;Posted via Blogaway&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-8399333369351016761?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/8399333369351016761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=8399333369351016761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/8399333369351016761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/8399333369351016761'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2010/05/blogging-from-my-phone.html' title='Blogging from my phone'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-5891852304298911973</id><published>2010-04-29T09:20:00.009-07:00</published><updated>2010-04-29T13:12:46.506-07:00</updated><title type='text'>Stuff I didn't know about Dev Studio Macros</title><content type='html'>So, I really need to spend more time reading the Visual C++ team blog.  A friend of mine just recently pointed me at their site (&lt;a href="http://blogs.msdn.com/vcblog/archive/2007/11/19/controlling-intellisense-through-macros.aspx"&gt;http://blogs.msdn.com/vcblog/archive/2007/11/19/controlling-intellisense-through-macros.aspx&lt;/a&gt;) with a cool little article on giving Dev Studio the ability to control Intellisense.  So instead of nuking the appropriate DLL, you can just use a Macro and the DTE environment &lt;span&gt;&lt;span&gt;setting to disable Intellisense (amongst other things).&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;And apparently this is also available in VC 2005 as well.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;Thanks go out to Francis Boivin - lead 3D programmer at Ubi Montreal, who I just reconnected with through Twitter.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;Now to go play around and see what other little nuggets are residing in the DTE.Properties for the TextEditor.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;div&gt;&lt;hr /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;EDIT: So, after trying this, there's one big problem with it.  If you use the macros to turn off IntelliSense (with a Solution loaded), restart Dev Studio, and load up the project, you'll see that it will update the NCB file.  This isn't the intended behaviour (or at least not the behaviour I'm looking for).  Looks like the tried and true method of renaming the DLL is the only sure-fire way of doing it.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-5891852304298911973?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.msdn.com/vcblog/archive/2007/11/19/controlling-intellisense-through-macros.aspx' title='Stuff I didn&apos;t know about Dev Studio Macros'/><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/5891852304298911973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=5891852304298911973' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/5891852304298911973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/5891852304298911973'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2010/04/stuff-i-didnt-know-about-dev-studio.html' title='Stuff I didn&apos;t know about Dev Studio Macros'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-4700577652526096439</id><published>2010-03-31T13:55:00.000-07:00</published><updated>2010-03-31T13:55:35.375-07:00</updated><title type='text'>AtomineerUtils for Visual Studio</title><content type='html'>I'm always on the hunt for tools that increase my documentation abilities in code. &amp;nbsp;Hitting the main Doxygen site today, I noticed a new link to Atomineer, a plug-in for DevStudio that&amp;nbsp;touts&amp;nbsp;increasing the speed to add comments to your codebase.&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Been trying it out for the last hour and so far, I'm pretty impressed. &amp;nbsp;Seamless integration into DevStudio (2005/2008/2010). Fairly customizable, but I'm only trying the free version right now. &amp;nbsp;However, at a price point of 5$ for the pro version, I suspect I'll be picking it up (and forgoing my weekly Starbucks run in it's place).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Give the free version a try and let me know what you think ...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-4700577652526096439?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.atomineerutils.com' title='AtomineerUtils for Visual Studio'/><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/4700577652526096439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=4700577652526096439' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/4700577652526096439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/4700577652526096439'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2010/03/atomineerutils-for-visual-studio.html' title='AtomineerUtils for Visual Studio'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-4250499487922695876</id><published>2010-03-18T13:35:00.002-07:00</published><updated>2010-04-29T15:35:43.350-07:00</updated><title type='text'>Disabling Intellisense in VS 2005</title><content type='html'>So, I've been using Visual Assist for ages.  I was introduced to it way back in 2003 and have been a faithful user ever since.  But I've always been annoyed that I have to have it and Intellisense running at the same time.
&lt;p&gt;
Apparently no longer!  It would appear that all you need to do is rename &lt;i&gt;feacp.dll&lt;/i&gt; to something else (I renamed it to&lt;i&gt; feacp.Not_dll&lt;/i&gt;).  Restarting Visual Studio and loading a project was super fast, compared to what I was used to.
&lt;p&gt;
You can find feacp.dll in &lt;b&gt;Microsoft Visual Studio 8\VC\vcpackages&lt;/b&gt;.
&lt;br /&gt;
(if you're using VS 2008, it's in  &lt;b&gt;Microsoft Visual Studio 9.0\VC\vcpackages&lt;/b&gt;)
&lt;p&gt;&lt;div&gt;I don't recommend deleting the DLL, just in case you ever want to roll it back.  But that's just me.
&lt;p&gt;&lt;p&gt;
Enjoy!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-4250499487922695876?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/4250499487922695876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=4250499487922695876' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/4250499487922695876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/4250499487922695876'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2010/03/disabling-intellisense-in-vs-2005.html' title='Disabling Intellisense in VS 2005'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-3171034808520916698</id><published>2010-03-18T09:36:00.008-07:00</published><updated>2010-03-18T10:04:09.932-07:00</updated><title type='text'>Updating the blog with a new layout</title><content type='html'>It's always a fun exercise to update my blog.  Mostly because I have to always remember to update my syntax highlighting code, which I forget to save somewhere for me to remember how to do it.  So this time, I'm going to blog about it, so I can remember it.

First off, I'm using the syntaxhighlighter provided by Alex Gorbatchev (&lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter"&gt;&lt;/a&gt;).  It's just awesome, pure and simple.  But remembering how to add it to your blog isn't.

So, the first thing that you have to do to add it to your Blogger blog is to update your template.  I'm not going to detail how to do that, because it changes a fair bit.  Once you have your template loaded, look for the /head tag and add the following before it:

&lt;pre class="brush: html"&gt;
&amp;lt;link href='http://alexgorbatchev.com/pub/sh/2.1.364/styles/shCore.css' rel='stylesheet' type='text/css'/&amp;gt; 
&amp;lt;link href='http://alexgorbatchev.com/pub/sh/2.1.364/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/&amp;gt; 
&amp;lt;script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shCore.js' type='text/javascript'&amp;gt;&amp;lt;/script&amp;gt; 
&amp;lt;script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushCpp.js' type='text/javascript'&amp;gt;&amp;lt;/script&amp;gt; 
&amp;lt;script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushCSharp.js' type='text/javascript'&amp;gt;&amp;lt;/script&amp;gt; 
&amp;lt;script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushCss.js' type='text/javascript'&amp;gt;&amp;lt;/script&amp;gt; 
&amp;lt;script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushJava.js' type='text/javascript'&amp;gt;&amp;lt;/script&amp;gt; 
&amp;lt;script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushJScript.js' type='text/javascript'&amp;gt;&amp;lt;/script&amp;gt; 
&amp;lt;script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushPhp.js' type='text/javascript'&amp;gt;&amp;lt;/script&amp;gt; 
&amp;lt;script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushPython.js' type='text/javascript'&amp;gt;&amp;lt;/script&amp;gt; 
&amp;lt;script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushRuby.js' type='text/javascript'&amp;gt;&amp;lt;/script&amp;gt; 
&amp;lt;script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushSql.js' type='text/javascript'&amp;gt;&amp;lt;/script&amp;gt; 
&amp;lt;script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushVb.js' type='text/javascript'&amp;gt;&amp;lt;/script&amp;gt; 
&amp;lt;script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushXml.js' type='text/javascript'&amp;gt;&amp;lt;/script&amp;gt; 
&amp;lt;script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushPerl.js' type='text/javascript'&amp;gt;&amp;lt;/script&amp;gt; 
&amp;lt;script language='javascript'&amp;gt; 
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.config.clipboardSwf = 'http://alexgorbatchev.com/pub/sh/2.1.364/scripts/clipboard.swf';
SyntaxHighlighter.all();
&amp;lt;/script&amp;gt;&lt;/pre&gt;

Now that you have this in your template (and have saved it) you can now start adding code to your site. In your page, add the following:
&lt;pre class="brush: html"&gt; 
&lt;script type="syntaxhighlighter" class="brush: html"&gt;&lt;![CDATA[
#include "yourcode.here"
]]&gt;&lt;/script&gt;
&lt;/pre&gt;

You can also use a more concise version using the pre tag:
&lt;pre class="brush: html"&gt;
&amp;lt;pre class="brush: html"&amp;gt
#include "yourcode.here"
&amp;lt;/pre&amp;gt
&lt;/pre&gt;

Note that there are a lot of different brush types that you can use:
&lt;ul&gt;&lt;li&gt;actionscript3, as3&lt;/li&gt;&lt;li&gt;bash, shell&lt;/li&gt;&lt;li&gt;c#, c-sharp, csharp&lt;/li&gt;&lt;li&gt;coldfusion, cf&lt;/li&gt;&lt;li&gt;cpp, c&lt;/li&gt;&lt;li&gt;css&lt;/li&gt;&lt;li&gt;delphi, pascal, pas&lt;/li&gt;&lt;li&gt;diff, patch&lt;/li&gt;&lt;li&gt;erl, erlang&lt;/li&gt;&lt;li&gt;groovy&lt;/li&gt;&lt;li&gt;java&lt;/li&gt;&lt;li&gt;perl&lt;/li&gt;&lt;li&gt;php&lt;/li&gt;&lt;li&gt;plain&lt;/li&gt;&lt;li&gt;powershell&lt;/li&gt;&lt;li&gt;python&lt;/li&gt;&lt;li&gt;ruby&lt;/li&gt;&lt;li&gt;scala&lt;/li&gt;&lt;li&gt;sql&lt;/li&gt;&lt;li&gt;vb&lt;/li&gt;&lt;li&gt;xml, html&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;
The source list can be found at &lt;a href="http://alexgorbatchev.com/pub/sh/"&gt;http://alexgorbatchev.com/pub/sh/&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-3171034808520916698?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/3171034808520916698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=3171034808520916698' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/3171034808520916698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/3171034808520916698'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2010/03/updating-blog-with-new-layout.html' title='Updating the blog with a new layout'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-1168678927208459093</id><published>2010-01-15T11:07:00.000-08:00</published><updated>2010-01-15T11:07:00.547-08:00</updated><title type='text'>So, I'm starting to play around with WPF</title><content type='html'>And if you're like me, you like a nice, clean roadmap/tutorial set.  The WPF tutorial happens to be one of the better tutorials I've seen online.&lt;br /&gt;
&lt;br /&gt;
Check it out &lt;a href="http://www.wpftutorial.net/Home.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-1168678927208459093?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.wpftutorial.net/Home.html' title='So, I&apos;m starting to play around with WPF'/><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/1168678927208459093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=1168678927208459093' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/1168678927208459093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/1168678927208459093'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2010/01/so-im-starting-to-play-around-with-wpf.html' title='So, I&apos;m starting to play around with WPF'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-9104958177741117590</id><published>2010-01-07T11:10:00.000-08:00</published><updated>2010-01-07T11:10:26.383-08:00</updated><title type='text'>God Mode for Windows 7</title><content type='html'>Found this on CNet this morning.  Apparently you can create a nice little 'one stop shop' for setting computer propeties in Windows 7.&lt;br /&gt;
&lt;br /&gt;
It's fairly trivial too.  Create a new folder and rename it:&lt;br /&gt;
   GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}&lt;br /&gt;
&lt;br /&gt;
And voila, a control-panel-esque window where you can play.  Nice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-9104958177741117590?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/9104958177741117590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=9104958177741117590' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/9104958177741117590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/9104958177741117590'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2010/01/god-mode-for-windows-7.html' title='God Mode for Windows 7'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-493230495436139756</id><published>2009-09-18T20:36:00.000-07:00</published><updated>2009-09-18T20:36:36.228-07:00</updated><title type='text'>OK, if this actually works, this is pretty awesome</title><content type='html'>Theme generator.  Testing now.  However it's pretty damn sweet looking if it actually works.&lt;br /&gt;
&lt;br /&gt;
Wow.  Works like a charm (Visual Studio 2008).  Very nice find.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-493230495436139756?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.frickinsweet.com/tools/Theme.mvc.aspx' title='OK, if this actually works, this is pretty awesome'/><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/493230495436139756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=493230495436139756' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/493230495436139756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/493230495436139756'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2009/09/ok-if-this-actually-works-this-is.html' title='OK, if this actually works, this is pretty awesome'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-198061603235775591</id><published>2009-09-11T13:18:00.000-07:00</published><updated>2009-09-11T13:18:40.090-07:00</updated><title type='text'>The Registry and 64 bit OSes.</title><content type='html'>So, today starts the first real foray for me into the land of 64 bit OSes.  This should prove interesting.&lt;br /&gt;
&lt;br /&gt;
Needless to say, it's been interesting so far.  Here's a tale of my first conundrum.&lt;br /&gt;
&lt;br /&gt;
One of the tools we have in house reads the 3D Studio Max registry (locations on where to put custom scripts et al).  So, in order to port this tool to an appropriate version of Max I need to be able to find out the value of "HKEY_LOCAL_MACHINE\\SOFTWARE\\Autodesk\\3dsMax\\11.0\\MAX-1:409\\Installdir".&lt;br /&gt;
&lt;br /&gt;
So, I crack open Regedit go to this registry key and change it, intending to break the tool.  I run the tool and voila, the tool behaves as normal (read: it doesn't break).&lt;br /&gt;
&lt;br /&gt;
Wait, what?&lt;br /&gt;
&lt;br /&gt;
I double check to ensure that the registry key has been changed (it now reads N:\NoDir), this time exit out of regedit and try again.&lt;br /&gt;
&lt;br /&gt;
Same results.  The tool works like before (read: as if the registry entry hasn't been changed).&lt;br /&gt;
&lt;br /&gt;
OK.  This is nutty.  Is there some kind of security privilege going on here?  If so, I shouldn't be able to change it.  Aggrivation!  But no, that's not the case.&lt;br /&gt;
&lt;br /&gt;
One Google search later I find the following web page: &lt;a href="http://support.microsoft.com/kb/256986"&gt;http://support.microsoft.com/kb/256986&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
More to the point, we have the following bit of text&lt;br /&gt;
&lt;blockquote&gt;Note The registry in 64-bit versions of Windows XP, Windows Server 2003, and Windows Vista is divided into 32-bit and 64-bit keys. Many of the 32-bit keys have the same names as their 64-bit counterparts, and vice versa. The default 64-bit version of Registry Editor that is included with 64-bit versions of Windows XP, Windows Server 2003, and Windows Vista displays the 32-bit keys under the following node:&lt;br /&gt;
HKEY_LOCAL_MACHINE\Software\WOW6432Node&lt;/blockquote&gt;&lt;br /&gt;
Oh my dear sweet zombie jesus.  Are you kidding me?&lt;br /&gt;
&lt;br /&gt;
No, apparently not.  Wow.  Just wow. So needless to say what I've been changing all along is the 64 bit app's version of the registry.  Un-be-lieveable.&lt;br /&gt;
&lt;br /&gt;
Oh well, something to be aware of in the future, I guess.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-198061603235775591?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/198061603235775591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=198061603235775591' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/198061603235775591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/198061603235775591'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2009/09/registry-and-64-bit-oses.html' title='The Registry and 64 bit OSes.'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-1535566974157599311</id><published>2009-08-09T14:11:00.008-07:00</published><updated>2010-03-18T09:31:57.616-07:00</updated><title type='text'>Mixing CLR and non-clr code</title><content type='html'>So, I'm trying to get back into playing around with my "Wanton" codebase (some editor stuffs I want to do) and I ran into a problem that I've experienced in the past before, but didn't get an adequate solution for in the past.&lt;br /&gt;
&lt;br /&gt;
So, in some libraries I'm creating I needed to mix in some engine based code (my Wanton codebase) into the editor.  It's fairly native C/C++ code. As soon as I included it, I got the following error:&lt;br /&gt;
&lt;br /&gt;
&lt;script type="syntaxhighlighter" class="brush: powershell"&gt;&lt;![CDATA[
1&gt;RenderPanel.cpp
1&gt;C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\objidl.h(5934) : error C2872: 'IDataObject' : ambiguous symbol
1&gt;        could be 'C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\objidl.h(251) : System::Windows::Forms::IDataObject IDataObject'
1&gt;        or       'c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : System::Windows::Forms::IDataObject'
]]&gt;&lt;/script&gt;&lt;br /&gt;
Very odd, to say the least.  Here's how I was invoking the headers:&lt;br /&gt;
&lt;br /&gt;
&lt;script type="syntaxhighlighter" class="brush: csharp"&gt;&lt;![CDATA[
#pragma once

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

#include "Graphics/basiccamera.h"
#include "Graphics/Viewport.h"
#include "Graphics/ViewportFactory.h"

namespace Sanity 
{
]]&gt;&lt;/script&gt;
&lt;br /&gt;
I've had issues in the past where the 'using' statement caused me grief, so I figured I'd move my header declarartions above them, a la:&lt;br /&gt;
&lt;br /&gt;
&lt;script type="syntaxhighlighter" class="brush: csharp"&gt;&lt;![CDATA[
#pragma once

#include "Graphics/basiccamera.h"
#include "Graphics/Viewport.h"
#include "Graphics/ViewportFactory.h"

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

namespace Sanity 
{
]]&gt;&lt;/script&gt;
&lt;br /&gt;
Lo and behold, that did it (compiles and runs fine).&lt;br /&gt;
&lt;br /&gt;
Digging around the net brought up this little gem:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://social.msdn.microsoft.com/forums/en-US/vclanguage/thread/18e7ab00-743f-497e-b340-cd2fd333a773"&gt;http://social.msdn.microsoft.com/forums/en-US/vclanguage/thread/18e7ab00-743f-497e-b340-cd2fd333a773&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The short and sweet of it? &lt;br /&gt;
&lt;blockquote&gt;If you add using namespace System::Windows::Forms; before including &lt;windows.h&gt; Visual C++ will be confused because IDataObject is also a managed interface in System::Windows::Forms. You can relegate windows.h declarations to a lower namespace:&lt;br /&gt;
 inamespace Win32{#include &lt;windows.h&gt; };and reference windows.h symbols with the Win32 namespace prefix, or move all using statements from .h to .cpp and add a namespace prefix when an ambiguous symbol is used.&lt;/blockquote&gt;&lt;br /&gt;
Just something I thought I would share with the populace at large.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-1535566974157599311?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/1535566974157599311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=1535566974157599311' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/1535566974157599311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/1535566974157599311'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2009/08/mixing-clr-and-non-clr-code.html' title='Mixing CLR and non-clr code'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-1684761719247465215</id><published>2009-08-04T14:23:00.000-07:00</published><updated>2009-08-04T14:23:15.938-07:00</updated><title type='text'>Playing with emacs</title><content type='html'>I've started playing around with emacs at work and I thought I would keep a list of commonly used commands and plug-ins on my blog.&lt;br /&gt;
&lt;br /&gt;
First off, some plugins that I'm using.  &lt;br /&gt;
&lt;br /&gt;
Color-themes is great and allows me a fair bit of selection when it comes to colorizing my editor. ( &lt;a href="http://www.emacswiki.org/emacs/ColorTheme"&gt;&lt;/a&gt; )&lt;br /&gt;
&lt;br /&gt;
Also, I'm using tabbar.el to give me tab functionality I'd be lost without my tabs. ( &lt;a href="http://www3.ntu.edu.sg/home5/pg04878518/EmacsTools.html"&gt;&lt;/a&gt; )&lt;br /&gt;
&lt;br /&gt;
As for commands, I'll sort them by category.&lt;br /&gt;
&lt;br /&gt;
Files&lt;br /&gt;
&lt;pre&gt; C-x C-f                Open a file.
 C-x C-s                Save the file in the current buffer.
 C-x s                  Save all buffers.
&lt;/pre&gt;&lt;br /&gt;
Edit&lt;br /&gt;
&lt;pre&gt; C-_                    Undo (that's an underscore).
 M-del                  Delete last word.
 C-x del                Delete to beginning of sentence.
 C-t                    Transpose two letters
 M-t                    Transpose two words

 M-d                    Kill a word.
 M-k                    Kill to end of sentence.
 M-z char               Kill up to next occurrence of char.
&lt;/pre&gt;&lt;br /&gt;
Searching&lt;br /&gt;
&lt;pre&gt; C-s                    Incremental search forward.
 C-s C-s                Cancel forward search.
 C-r                    Incremental search backward.
&lt;/pre&gt;Buffers&lt;br /&gt;
&lt;pre&gt; C-x k                  Kill a specific buffer by name (RET by default kills the current buffer.
 C-x C-q                Flag a buffer as read-only.
 C-x C-b                List buffers
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-1684761719247465215?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://ftp.gnu.org/pub/gnu/emacs/windows/' title='Playing with emacs'/><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/1684761719247465215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=1684761719247465215' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/1684761719247465215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/1684761719247465215'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2009/08/playing-with-emacs.html' title='Playing with emacs'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-6150237077477732711</id><published>2009-07-21T13:31:00.002-07:00</published><updated>2009-07-21T13:31:33.272-07:00</updated><title type='text'>Fixed!</title><content type='html'>Code and layout appears to be functioning correctly again.  More code updates coming soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-6150237077477732711?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/6150237077477732711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=6150237077477732711' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/6150237077477732711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/6150237077477732711'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2009/07/fixed.html' title='Fixed!'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-1675674770865360666</id><published>2009-07-07T18:20:00.003-07:00</published><updated>2009-07-21T12:49:14.620-07:00</updated><title type='text'>C#, MSTest and getting it to work like unittest++</title><content type='html'>So, I just spent a good bit of this afternoon setting up a C# project that I&amp;#39;ve been working on to work like UnitTest++.  Let me explain ...&lt;br&gt;&lt;br&gt;UnitTest++ allows you to add a post-build step that actually runs your code, that&amp;#39;s under unit testing after each compilation.  This is really usefull as it allows you to find bugs at compile time (not run-time).&lt;br&gt; &lt;br&gt;This is considerably harder to do with MSTest (the built in unit test framework in .NET/Dev Studio).  However, your humble servant has gone through the work and figured out the process.&lt;br&gt;&lt;br&gt;Assume that you have the following:&lt;br&gt; &lt;ol&gt;&lt;li&gt;an assembly, containing your project, called Foo&lt;/li&gt;&lt;li&gt;your Unit Test assembly, called FooTesting&lt;/li&gt;&lt;/ol&gt;Inside of the Foo project, you will need a post build step that looks like this:
&lt;pre class="brush: vb; bloggerMode: true"&gt;cd $(SolutionDir)&lt;br&gt; REM Do the following so we don&amp;#39;t have a polluted TestResults folder&lt;br&gt;rmdir /S/Q TestResults&lt;br&gt;mkdir TestResults&lt;br&gt;&amp;quot;$(DevEnvDir)mstest.exe&amp;quot;  /testcontainer:$(SolutionDir)FooTesting\bin\$(ConfigurationName)\FooTesting.dll&lt;br&gt; &lt;/pre&gt;&lt;br&gt;&lt;br&gt;This took freakin&amp;#39; forever to work out.  However it still doesn&amp;#39;t give me the nice formatting of UnitTest++ that allows me to go directly to the line number of the failed test.  It&amp;#39;s really a shame there isn&amp;#39;t a way for the console spew to be formatted in a way that DevStudio can eat.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-1675674770865360666?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/1675674770865360666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=1675674770865360666' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/1675674770865360666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/1675674770865360666'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2009/07/c-mstest-and-getting-it-to-work-like.html' title='C#, MSTest and getting it to work like unittest++'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-248456805565409536</id><published>2009-06-29T11:17:00.001-07:00</published><updated>2009-06-29T11:17:05.262-07:00</updated><title type='text'>Screen Capture tools - Greenshot</title><content type='html'>So far, this has been a really awesome little screen capture tool.  That and it opens the captured image in it's own little image editor.  Sweet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-248456805565409536?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://greenshot.sourceforge.net/' title='Screen Capture tools - Greenshot'/><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/248456805565409536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=248456805565409536' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/248456805565409536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/248456805565409536'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2009/06/screen-capture-tools-greenshot.html' title='Screen Capture tools - Greenshot'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-7070122882887341884</id><published>2009-06-28T11:18:00.001-07:00</published><updated>2009-06-28T11:18:29.183-07:00</updated><title type='text'>Grrrr</title><content type='html'>Google Pages is going away.  So that's going to hose where I store my syntax highlighting.  Now my blog is busted.&lt;br /&gt;
&lt;br /&gt;
Code snippets are hosed.  I'm trying to fix it, please be patient.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-7070122882887341884?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/7070122882887341884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=7070122882887341884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/7070122882887341884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/7070122882887341884'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2009/06/grrrr.html' title='Grrrr'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-664925778479440844</id><published>2009-06-23T23:03:00.001-07:00</published><updated>2009-06-23T23:04:16.346-07:00</updated><title type='text'>More Dev Studio fun time happiness</title><content type='html'>Wild times tonight.&lt;br /&gt;
&lt;br /&gt;
So, I'm working on my editor again (because ... you know ... I don't need sleep) and I run into a very interesting situation.&lt;br /&gt;
&lt;br /&gt;
I've created a new UserControl called RenderPanel.  It derives from System::Windows::Forms::Panel.  This is a new control.  I'd like it to show up in the toolbox.  It doesn't.&lt;br /&gt;
&lt;br /&gt;
So, I say "What the heck" and add it into the form designer by hand.  Compiles fine and I get my resultant render view.&lt;br /&gt;
&lt;br /&gt;
Then I try to run Visual Studio's designer on it.  Nuh-un.  I get a plethora of issues from the designer, telling me that I can't open the form because my RenderView isn't defined.&lt;br /&gt;
&lt;br /&gt;
Ugh.&lt;br /&gt;
&lt;br /&gt;
So, I dig.  A lot.  I code.  A lot.  Nothing seems to help.  Then I run across this little article: &lt;a href="http://www.codeguru.com/forum/showpost.php?p=1571025&amp;postcount=14"&gt;http://www.codeguru.com/forum/showpost.php?p=1571025&amp;postcount=14&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Nah, it can't be that easy, can it?  So, I go to the menu Tools-&gt;Options and then in the Windows Forms Designer, I enable the AutoToolboxPopulate field.  I close the project, open the project and lo and behold, I have a new toolbox group called Sanity_20 Components (the editor is called Sanity ... I'm at Revision 2.0) and there to my complete shock is a little blue gear labeled 'RenderPanel'.&lt;br /&gt;
&lt;br /&gt;
And I can add it to my form.  And it works.&lt;br /&gt;
&lt;br /&gt;
Completely unbelieveable.  But who am I to argue?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-664925778479440844?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/664925778479440844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=664925778479440844' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/664925778479440844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/664925778479440844'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2009/06/more-dev-studio-fun-time-happiness.html' title='More Dev Studio fun time happiness'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-2857847239807440759</id><published>2009-06-21T21:43:00.000-07:00</published><updated>2009-06-21T21:43:33.290-07:00</updated><title type='text'>.NET 3.5, Windows Forms and DirectX</title><content type='html'>Hey!&lt;br /&gt;
&lt;br /&gt;
So, I got to do a little work on my at-home project this weekend (not lots, but a little).  One of the things that I'm starting to play around with is Windows Forms in .NET.  So I thought I'd do a little editor work, migrating from a pure Windows application into a .NET forms based app.  Seems like a good idea, right?&lt;br /&gt;
&lt;br /&gt;
Well, to a point it was.  I got the form build, a simple layout setup and then I went to link in my existing libraries.&lt;br /&gt;
&lt;br /&gt;
No go.  When I tried to call a static initializer in my library, I got the following linker error:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;1&gt;Sanity_2.0.obj : error LNK2001: unresolved external symbol "public: static void __clrcall Wanton::Graphics::CViewportFactory::Init(void)" (?Init@CViewportFactory@Graphics@Wanton@@$$FSMXXZ)
&lt;/pre&gt;&lt;br /&gt;
__clrcall?  That shouldn't be an issue.  The library isn't a CLR library ... is it?  A little investigation of my library indicates that it isn't.  So. for fun I decided to explicity declare the method in question as __cdecl.  Doing so (just adding __cdecl to the method signature) resulted in the following error:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;4&gt;Graphics.lib(ViewportFactory.obj) : fatal error LNK1313: ijw/native module detected; cannot link with pure modules
&lt;/pre&gt;&lt;br /&gt;
Well now.  That certainly gives us a bit to chew on.  Why does it think that the new form I've created is a *pure* clr app?  I just asked it to create a Windows Form app, using .NET 3.5.  In Visual Studio 2008.&lt;br /&gt;
&lt;br /&gt;
OK, so I'll just set the clr type to non pure.  Simple enough.  Let's see, where's that setting ... under linker probably ...&lt;br /&gt;
&lt;br /&gt;
Nope.&lt;br /&gt;
&lt;br /&gt;
OK, under C/C++ then&lt;br /&gt;
&lt;br /&gt;
Nope.&lt;br /&gt;
&lt;br /&gt;
....&lt;br /&gt;
&lt;br /&gt;
Wait, where the Fuzzy Hell is it defined?  Looking in the C/C++ Command line view, the value is shows up ( /clr:pure, for those wondering ).&lt;br /&gt;
&lt;br /&gt;
So, I start at the top (normally I start at the bottom of lists ... things tend to be at the bottom of piles, but this time, I had a gut feeling) and look in the 'General' section.&lt;br /&gt;
&lt;br /&gt;
Lo and Behold, there it is, under 'Common Language Runtime Support'.&lt;br /&gt;
&lt;br /&gt;
I *suppose* it makes sense, but you know, that seems like an odd place for it to live.&lt;br /&gt;
&lt;br /&gt;
Anyway, linking with just a simple CLR option resolves the issue and all is once again cool in the world.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-2857847239807440759?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/2857847239807440759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=2857847239807440759' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/2857847239807440759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/2857847239807440759'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2009/06/net-35-windows-forms-and-directx.html' title='.NET 3.5, Windows Forms and DirectX'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-2056608733879927979</id><published>2009-05-20T11:54:00.000-07:00</published><updated>2009-05-20T11:54:38.545-07:00</updated><title type='text'>Usefull tools - NiftyPerforce</title><content type='html'>Tired of Perforce's woefully awful SCC plugin for Dev Studio.  Try NiftyPerforce.  It's fairly lightweight and does what it advertises ... Allowing you to check out files in Perforce.&lt;br /&gt;
&lt;br /&gt;
I'd used this in the past, but had forgotten about the link.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-2056608733879927979?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/niftyplugins/' title='Usefull tools - NiftyPerforce'/><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/2056608733879927979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=2056608733879927979' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/2056608733879927979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/2056608733879927979'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2009/05/usefull-tools-niftyperforce.html' title='Usefull tools - NiftyPerforce'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-3207088016867171429</id><published>2009-05-18T22:14:00.000-07:00</published><updated>2009-05-18T22:14:32.314-07:00</updated><title type='text'>So, it's been a while since I posted anything</title><content type='html'>The new job has been keeping me plenty busy.  However I think it's time I started some home coding projects.  Being a guy that likes to build world editors in his spare time (because, you know, I have so much of it), I also thought I'd get back into a bit more of a rendering focus.  It's been a while, I've forgotten a great deal, so this should make for some interesting reading.&lt;br /&gt;
&lt;br /&gt;
One of the first things that I'm working on is a simple Rendering subsytem that I can plug into my apps.  Nothing fancy, just something to get me familiar with D3D 9 and OpenGL, as well as get me a framework for learning shader/fragment coding.  More on that as I develop it.&lt;br /&gt;
&lt;br /&gt;
However, something that I think I will post about, especially with D3D programming, is mentioning the DirectX control panel.  Specifically the ability to enable using the Debug version of the DirectX DLL's and increasing the verbosity of the debug information that is spewed out.  This is really helpful, as it helped me track down a stupid memory leak that I had in my code (my underlying system wasn't releasing a D3DDevice that I thought it was).  I'll put up a screen shot of the DirectX control panel shortly.&lt;br /&gt;
&lt;br /&gt;
Anyway, I'm back at this part time (summer fun, when it rains and since there's nothing good on TV during the summer).  I'll keep everyone updated as the progress continues.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-3207088016867171429?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/3207088016867171429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=3207088016867171429' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/3207088016867171429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/3207088016867171429'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2009/05/so-its-been-while-since-i-posted.html' title='So, it&apos;s been a while since I posted anything'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-4313323467900473212</id><published>2008-11-27T20:35:00.008-08:00</published><updated>2009-07-21T13:10:46.851-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dev Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='doxygen'/><category scheme='http://www.blogger.com/atom/ns#' term='macros'/><title type='text'>Updating the DOxygen macros</title><content type='html'>So, after my interview at R* Vancouver (I have no idea what they actually call themselves) I thought I would update my Doxygen macros.  The reason?  I found some old source code that a co-worker of mine when I was at Radical (Neil Martin) had written and there were some tidbits in there that got me thinking about how I could update what I've got into something more manageable.  I had a chance to look over the code last night and it was pretty sloppy.  So the update gives me a chance to clean it up substantially.

Functionality wise, not much has changed.  I've created a lot more little functions that do very small things.  For example, I've added a 'TimeStamp' function:

&lt;pre class="brush: vb; bloggerMode: true"&gt;
Function TimeStamp()
    Dim CurrentDate        
    CurrentDate = System.DateTime.Now.ToShortDateString()        
    Dim CurrentTime        
    CurrentTime = System.DateTime.Now.ToShortTimeString()        
    TimeStamp = "/// Time-stamp: &lt;@(#)" &amp; ActiveDocument.Name &amp; "   " &amp; CurrentDate &amp; " - " &amp; CurrentTime &amp; "   " &amp; Author() &amp; "&gt;"    
End Function&lt;/pre&gt;
Which I then use like so:
&lt;pre class="brush: vb; bloggerMode: true"&gt;
Sub GenerateFileHeader()
    DTE.UndoContext.Open("Generate File Header")
    Try
        Dim linenumber As Integer
        DTE.ActiveDocument.Selection.StartOfDocument()
        Dim FileType
        Dim selection As TextSelection
        selection = DTE.ActiveDocument.Selection
        selection.Text = TimeStamp() &amp; vbLf
        ...
&lt;/pre&gt;
Overall, this makes the code a lot cleaner to read.  And a fair bit more manageable.  The other thing that I added was the ability to automatically generate Header Guards (something I wanted to add, but was just too lazy last time to do it).

As usual, to code follows, as well as a link to a downloadable version.  Enjoy.

&lt;pre class="brush: vb; bloggerMode: true"&gt;
Imports SystemImports SystemImports EnvDTEImports EnvDTE80Imports System.DiagnosticsImports Microsoft.VisualBasicImports Microsoft.VisualBasic.ControlCharsPublic 
Module Documentation
    ' Check to see if our cursor (the TextSelection passed in) is currently at the first line
    Function OnFirstLine(ByVal selection As TextSelection)
        Return (selection.ActivePoint.Line = 1)
    End Function

    ' Generate a TimeStamp string
    Function TimeStamp()
        Dim CurrentDate
        CurrentDate = System.DateTime.Now.ToShortDateString()
        Dim CurrentTime
        CurrentTime = System.DateTime.Now.ToShortTimeString()
        TimeStamp = "/// Time-stamp: &lt;@(#)" &amp; ActiveDocument.Name &amp; "   " &amp; CurrentDate &amp; " - " &amp; CurrentTime &amp; "   " &amp; Author() &amp; "&gt;"
    End Function

    ' Generate a Doxygen 'Brief' tag, that the user can then populate
    Function Brief()
        Brief = "/// @brief   :"
    End Function

    ' Generate a 'Purpose' string that the user can populate.  Be intellegent about it,
    ' ensuring proper grammar for header as opposed to source files.
    Function Purpose()
        Dim FileType As String
        If InStr(DTE.ActiveDocument.Name, ".h") &lt;&gt; 0 Then
            FileType = "Declaration of class "
        Else
            FileType = "Implementation of methods for class "
        End If
        Purpose = "///  Purpose : " &amp; FileType
    End Function

    ' Generate a DateStamp string
    Function DateStamp()
        Dim CurrentDate
        CurrentDate = System.DateTime.Now.ToShortDateString()
        DateStamp = "/// @date    :" &amp; CurrentDate
    End Function

    ' Generate a simple Comment Line (no fancy decorations)
    Function CommentLine()
        CommentLine = "///"
    End Function

    ' Generate a DOxygen filename tag comment line
    Function FileName()
        FileName = "/// @file    :" &amp; DTE.ActiveDocument.Name
    End Function

    ' Generate an DOxyge author tag comment line
    Function Author()
        ' Up to you, you can either use this function to automatically get the user name
        ' or put in a literal string.
        Author = "/// @author  :" &amp; System.Environment.UserName
    End Function

    ' Generate a Decorated comment line separator
    Function CommentSeparatorLine()
        CommentSeparatorLine = "/// *********************************************************************"
    End Function

    ' Select the current line
    ' Are we actually using this?
    Function SelectCurrentLine()
        DTE.ActiveDocument.Selection.StartOfLine(0)
    End Function

    ' Generate a newline
    ' Question?  Are we actually using this?
    Function NewLine(ByVal selection As TextSelection)
        selection.NewLine()
        selection.StartOfLine()
    End Function

    ' Is the current file a Header file?
    Function IsHeaderFile()
        Dim fileName As String
        fileName = DTE.ActiveDocument().Name
        fileName = Right(fileName, fileName.Length() - InStr(fileName, "."))
        fileName = fileName.ToUpper()
        Return (fileName = "HPP") Or (fileName = "H")
    End Function

    ' Generate Header guards for our file
    Function GenerateHeaderGuards()
        Dim fileName As String
        Dim ifndef As String
        Dim define As String
        fileName = DTE.ActiveDocument().Name
        fileName = Left(fileName, InStr(fileName, ".") - 1)
        fileName = "__" + fileName + "_HPP__"
        fileName = fileName.ToUpper()
        ifndef = "#ifndef " + fileName + vbLf
        define = "#define " + fileName + vbLf + vbLf
        ActiveDocument.Selection.Text = ifndef + define
        ActiveDocument.Selection.EndOfDocument()
        ActiveDocument.Selection.Text = vbLf + "#endif // " + fileName
        ActiveDocument.Selection.StartOfDocument()
    End Function

    ' Generate the default Version history
    Function VersionHistory()
        Dim buffer As String
        Dim CurrentDate
        CurrentDate = System.DateTime.Now.ToShortDateString()
        buffer = "/// Version History:" + vbLf
        buffer = buffer + CommentLine() + vbLf
        buffer = buffer + "/// V 0.10  " &amp; CurrentDate &amp; " : First Revision" + vbLf
        buffer = buffer + CommentLine() + vbLf
        buffer = buffer + CommentSeparatorLine() + vbLf
        buffer = vbLf + vbLf
        VersionHistory = buffer
    End Function

    ' What's our return type for the given statement?
    Function GetReturnType(ByVal inStatement As String)
        Dim returnstring As String
        Dim statement As String
        statement = inStatement
        'Find first bracket
        If (InStr(statement, "(") &lt;&gt; 0) Then
            'This gets us the return value and function/method name
            statement = Left(statement, InStr(statement, "(") - 1)
            ' Strip off whitespaces (some people put a space before the '('
            statement = TrimAll(statement)
            Dim tokenArray() As String
            tokenArray = Split(Trim(statement), " ")
            If tokenArray.Length &gt; 1 Then
                Dim index As Integer
                index = 0
                While index &lt; tokenArray.Length - 1
                    returnstring = returnstring + tokenArray(index)
                    index = index + 1
                End While
                If returnstring.ToLower = "void" Then
                    returnstring = "/// "
                Else
                    returnstring = "/// @returns   :" &amp; returnstring
                End If
            Else
                returnstring = "/// "
            End If
        End If
        GetReturnType = returnstring
    End Function

    ' Generate a paramater tag bundle from the given statement
    Function BuildParams(ByVal TextIn As String) As String
        Dim args As String
        Dim result As String
        Dim argsarray() As String
        args = Split(TextIn, "(")(1)
        args = Replace(args, ")", " ")
        args = TrimAll(args)
        argsarray = Split(args, ",")
        ' now for our args
        result = ""
        For Each arguement As String In argsarray
            Dim tokenArray() As String
            Dim character As Char
            tokenArray = Split(Trim(arguement), " ")
            result = result &amp; "/// @param " &amp; tokenArray(tokenArray.Length - 1) &amp; vbLf
        Next
        BuildParams = result
    End Function

    ' Trim out all the unecessary fluff from a given string.
    Function TrimAll(ByVal TextIn As String) As String
        Try ' Replace ALL Duplicate Characters in String with a Single Instance
            Dim result As String
            result = TextIn
            result = Replace(result, vbTab, " ")
            result = Replace(result, vbNullChar, " ")
            result = Replace(result, vbCr, " ")
            result = Replace(result, vbLf, " ")
            result = Trim(result)
            TrimAll = result
        Catch Exp As Exception
            TrimAll = TextIn ' Oops
        End Try
        Return TrimAll
    End Function

    ' Generate the statement that we want to test
    Function GetStatement()
        Dim selection As TextSelection
        Dim statement As String
        Dim linenumber As Integer
        selection = DTE.ActiveDocument.Selection
        ' Get all the arguements from the method
        linenumber = selection.ActivePoint.Line
        selection.StartOfLine()
        selection.SelectLine()
        statement = TrimAll(selection.Text)
        Dim nextline As String
        Dim lastLine As Integer
        lastLine = linenumber
        While (InStr(statement, ")") = 0)
            selection.SelectLine()
            If lastLine &lt;&gt; selection.ActivePoint.Line Then
                nextline = TrimAll(selection.Text)
                statement = statement &amp; nextline
            Else
                Exit While
            End If
        End While
        selection.GotoLine(linenumber)
        selection.StartOfLine()
        GetStatement = statement
    End Function

    Sub PerformDocumentation()
        Try
            Dim objTextDoc As TextDocument
            Dim editPoint As EnvDTE.EditPoint
            Dim selection As TextSelection
            Dim linenumber As Integer
            objTextDoc = DTE.ActiveDocument.Object("TextDocument")
            editPoint = objTextDoc.StartPoint.CreateEditPoint
            selection = objTextDoc.Selection
            linenumber = selection.ActivePoint.Line
            selection.StartOfLine()
            If OnFirstLine(selection) = True Then
                GenerateFileHeader()
            ElseIf selection.FindText("class") = True Then
     'Class declaration
                GenerateClassHeader()
            ElseIf selection.FindText("::") = True Then
     'Method definition
                GenerateMethodHeader()
            Else
                If selection.FindText("{") Then
             'Some Function definition
                    selection.GotoLine(linenumber)
                    GenerateFunctionHeader()
                End If
            End If
        Catch ex As Exception
            Dim messagebox As System.Windows.Forms.MessageBox
            messagebox.Show(ex.Message)
        Finally
        End Try
    End Sub

    Sub GenerateMethodHeader()
        Dim selection As TextSelection
        DTE.UndoContext.Open("MethodHeader")
        Try
            selection = DTE.ActiveDocument.Selection
            ' Get all the arguements from the method
            Dim args As String
            Dim argsarray() As String
            Dim linenumber As Integer
            Dim statement As String
            statement = GetStatement()
            selection.NewLine()
            selection.StartOfLine()
            selection.Text = CommentSeparatorLine() &amp; vbLf
            linenumber = selection.ActivePoint.Line ' This is where we want to return to
            selection.Text = Brief() &amp; vbLf
            selection.Text = CommentLine() &amp; vbLf
            selection.Text = GetReturnType(statement) &amp; vbLf
            selection.Text = BuildParams(statement)
            selection.Text = CommentSeparatorLine() &amp; vbLf
            selection.GotoLine(linenumber)
            selection.EndOfLine()
        Catch ex As Exception
            Dim messagebox As System.Windows.Forms.MessageBox
            messagebox.Show(ex.Message)
        Finally
            DTE.UndoContext.Close()
        End Try
    End Sub

    Sub GenerateFunctionHeader()
        Dim selection As TextSelection
        DTE.UndoContext.Open("FunctionHeader")
        Try
            selection = DTE.ActiveDocument.Selection
            ' Get all the arguements from the method
            Dim args As String
            Dim argsarray() As String
            Dim linenumber As Integer
            Dim statement As String
            statement = GetStatement()
            selection.NewLine()
            selection.StartOfLine()
            selection.Text = CommentSeparatorLine() &amp; vbLf
            linenumber = selection.ActivePoint.Line ' This is where we want to return to
            selection.Text = Brief() &amp; vbLf
            selection.Text = CommentLine() &amp; vbLf
            selection.Text = GetReturnType(statement) &amp; vbLf
            selection.Text = BuildParams(statement)
            selection.Text = CommentSeparatorLine() &amp; vbLf
            selection.GotoLine(linenumber)
            selection.EndOfLine()
        Catch ex As Exception
            Dim messagebox As System.Windows.Forms.MessageBox
            messagebox.Show(ex.Message)
        Finally
            DTE.UndoContext.Close()
        End Try
    End Sub

    Sub GenerateClassHeader()
        DTE.UndoContext.Open("ClassHeader")
        Try
            Dim selection As TextSelection
            Dim linenumber As Integer
            selection = DTE.ActiveDocument.Selection
            selection.StartOfLine()
            selection.NewLine()
            selection.StartOfLine()
            selection.Text = CommentSeparatorLine() &amp; vbLf
            linenumber = selection.ActivePoint.Line ' This is where we want to return to
            selection.Text = Brief() &amp; vbLf
            selection.Text = CommentLine() &amp; vbLf
            selection.Text = CommentLine() &amp; vbLf
            selection.Text = CommentSeparatorLine() &amp; vbLf
            selection.GotoLine(linenumber)
            selection.EndOfLine()
        Catch ex As Exception
        Finally
            DTE.UndoContext.Close()
        End Try
    End Sub

    Sub GenerateFileHeader()
        DTE.UndoContext.Open("Generate File Header")
        Try
            Dim linenumber As Integer
            DTE.ActiveDocument.Selection.StartOfDocument()
            Dim FileType
            Dim selection As TextSelection
            selection = DTE.ActiveDocument.Selection
            selection.Text = TimeStamp() &amp; vbLf
            selection.Text = CommentSeparatorLine() &amp; vbLf
            selection.Text = FileName() &amp; vbLf
            selection.Text = CommentLine() &amp; vbLf
            selection.Text = Author() &amp; vbLf
            selection.Text = DateStamp() &amp; vbLf
            selection.Text = CommentLine() &amp; vbLf
            linenumber = selection.ActivePoint.Line ' This is where we want to return to
            selection.Text = Purpose() &amp; vbLf
            selection.Text = CommentLine() &amp; vbLf
            selection.Text = Brief() &amp; vbLf
            selection.Text = CommentSeparatorLine() &amp; vbLf
            selection.Text = VersionHistory() &amp; vbLf
            If IsHeaderFile() = True Then
                GenerateHeaderGuards()
            End If
            selection.GotoLine(linenumber)
            selection.EndOfLine()
        Catch ex As Exception
            Dim messagebox As System.Windows.Forms.MessageBox
            messagebox.Show(ex.Message)
        Finally
            DTE.UndoContext.Close()
        End Try
    End
 SubEnd
 Module&lt;/pre&gt;
Download here: &lt;a href="http://ash.matheson.googlepages.com/Documentation.rar"&gt;http://ash.matheson.googlepages.com/Documentation.rar&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-4313323467900473212?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://ash.matheson.googlepages.com/home' title='Updating the DOxygen macros'/><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/4313323467900473212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=4313323467900473212' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/4313323467900473212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/4313323467900473212'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2008/11/updating-doxygen-macros.html' title='Updating the DOxygen macros'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-1329157084502462876</id><published>2008-11-19T12:12:00.001-08:00</published><updated>2009-07-21T13:16:42.876-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QT'/><category scheme='http://www.blogger.com/atom/ns#' term='Ogre'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>QT and Ogre</title><content type='html'>So, during my time off, I've started looking at QT (something I used at Radical a ways back ... when it was at 3.3 or so) and Ogre.  True to what I was just recently doing at my last job, I thought I'd give a go at using both for a world editor.

So, I've been used to using wxWidgets for the last couple of years.  There's things I like about it (Free, source code included and DialogBlocks is a relatively nice/non-retarded gui builder) and some things I don't like about it (it's free, so there's little support for it, subclassing compound widgets is a royal pain in the tuckas ).

Anyway, what I wanted to start with was a simple window, with a menu, a status bar and a widget that encompassed a render context.

So, I crack open the designer tool and go to work building a simple app.  I create a mainwindow gui.  This is nice because it comes with a menu, docking toolbar and status bar all ready to go.  Then I add a widget (just a simple one) to the main window and then try to get it to fit completely in the layout.  This is a nightmare, because I'm used to how Dialogblocks works (you know, in a way that makes sense).  Apparently you have to click on the main background and do some fancy 'layout fitting' garbage.  Completely non-intuitive.  Not a good start, if you ask me.

Anyway, I work a little more, trying to figure out how to use the Designer to create a subclass of a QWidget that would represent my new render window.  Not easy, but significantly less tricky than layout.

Now that's done, I start trying to bind Ogre to the window.  This is where it all falls apart.  Like a lot of these SDKs, the documentation is woefully inadequate.  As soon as I get the widget ready to start rendering my window, I get nothing. Until I resize my window.  Then I get this god-awful tearing of the widget and the Ogre based render.  So, this leads me to believe that I've improperly overridden the paint method of the QWidget class.  I dig and I dig and I dig, but everything I read about subclassing widgets tells me that I'm doing the right thing.  That is until I read somewhere on a web site that in QT 4+, each widget automatically double buffers.  So, somewhere in the deep internals of QT, they have a hidden swap chain that I have no idea how to override.  So, after lots and lots of digging, I finally figure out what I need to set as part of the derived objects construction attributes.

So, for a class like so:
&lt;pre class="brush: cpp; bloggerMode: true"&gt;
#ifndef __RENDERWINDOW_H__
#define __RENDERWINDOW_H__
#include &lt;QWidget&gt;
#include "context.h"
QT_BEGIN_NAMESPACE
/// *********************************************************************
/// @brief A RenderWindow is a Widget that is used for rendering
/// The RenderContext performs our rendering, but this class manages
/// all the window level refreshing.
/// 
/// *********************************************************************
class RenderWindow :    public QWidget
{
public:
    RenderWindow(void);
    RenderWindow ( QWidget * parent = 0, Qt::WindowFlags f = 0 );
    ~RenderWindow(void);
    virtual void showEvent( QShowEvent * event );
    virtual void paintEvent( QPaintEvent * event );
    virtual void resizeEvent(QResizeEvent *evt);
    void Init( void );
    void Update( void );
protected:
    RenderContext   m_RenderContext;
    bool            m_WindowInitialized : 1;
  };
QT_END_NAMESPACE
#endif
 // __RENDERWINDOW_H__
&lt;/pre&gt;
And where RenderContext is a class I've derived for doing the actual binding to Ogre, we need a constructor that looks like this:

&lt;pre class="brush: cpp; bloggerMode: true"&gt;
/// *********************************************************************
/// @brief unparameterized Constructor for the Renderwindow
/// Note that we have to set the following attributes to disable QT's
/// double buffering, which was causing all sorts of flickering
/// 
/// *********************************************************************
RenderWindow::RenderWindow(void)   : m_WindowInitialized( false )
{
    setAttribute(Qt::WA_PaintOnScreen);
    setAttribute(Qt::WA_OpaquePaintEvent);
    setAttribute(Qt::WA_NoSystemBackground);
    setAutoFillBackground( false );
}

/// *********************************************************************
/// @brief Parameterized Constructor for the RenderWindow
/// Note that we have to set the following attributes to disable QT's
/// double buffering, which was causing all sorts of flickering
/// 
/// @param parent Parent Window
/// @param f      Additional window creation flags
/// *********************************************************************
RenderWindow::RenderWindow( QWidget * parent, Qt::WindowFlags f ): QWidget( parent, f ),  m_WindowInitialized( false )
{
    setAttribute(Qt::WA_PaintOnScreen);
    setAttribute(Qt::WA_OpaquePaintEvent);
    setAttribute(Qt::WA_NoSystemBackground);
    setAutoFillBackground( false );
}
&lt;/pre&gt;
As well, make sure you override the painting method as well:

&lt;pre class="brush: cpp; bloggerMode: true"&gt;
/// *********************************************************************
/// @brief Handler for the paint event (overridden from the virutal base)
/// In this, we're simply calling the RenderWindow's Update Method.
/// 
/// @param event the event to process (which we don't)
/// *********************************************************************
void RenderWindow::paintEvent( QPaintEvent * event )
{
    Update();
}

/// *********************************************************************
/// @brief Update our RenderWindow/// We update one frame of the rendercontext
/// 
/// *********************************************************************void RenderWindow::Update( void )
{
    g_SceneManager-&gt;GetSceneRoot()-&gt;_fireFrameStarted();
    m_RenderContext.Update( );
    g_SceneManager-&gt;GetSceneRoot()-&gt;_fireFrameEnded();
}
&lt;/pre&gt;
And that seems to work fine.

As I progress more with this, I'll update with new details.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-1329157084502462876?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/1329157084502462876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=1329157084502462876' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/1329157084502462876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/1329157084502462876'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2008/11/qt-and-ogre.html' title='QT and Ogre'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-3449571852314582688</id><published>2008-11-18T18:27:00.015-08:00</published><updated>2009-07-21T13:41:50.171-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dev Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='doxygen'/><category scheme='http://www.blogger.com/atom/ns#' term='macros'/><title type='text'>DOxygen and Dev Studio</title><content type='html'>So, with a little more time on my hands, I've been working on some portfolio stuff. For me, this means coding. Now at work, I had a handily little macro that I had scavenged together that added DOxygen comments to my code (bound to a keypress).  Unfortunately, I left all that at work (and I don't have it backed up anywhere).&lt;br /&gt;
&lt;br /&gt;
I've also had some time to play around with some CSS and jScript from Google code.   This is pretty neat: &lt;a href="http://code.google.com/p/syntaxhighlighter/"&gt;http://code.google.com/p/syntaxhighlighter/&lt;/a&gt; and it was very easy to add to this blog.  It supports a variety of languages and looks awesome.  I recommend you try it!&lt;br /&gt;
&lt;br /&gt;
So, this was an excellent opportunity for me to create a new one and post it here.  As well, I can discuss some of the things I ran into along my way.&lt;br /&gt;
&lt;br /&gt;
It's pretty simple how I went about developing this set of macros.  First off, I wanted one 'entry' function for determining what kind of comment I was making.  This was pretty simple, and the method I used for determining if I'm commenting the top of a file, a class, a method or a function is pretty straightforward (potentially not the best, but I'll juice that up as time goes on).  I boil it down to this:&lt;br /&gt;
&lt;br /&gt;
a) if the current line is line zero, it's a file header comment.&lt;br /&gt;
b) if the current line contains a 'class' keyword, we're documenting a class&lt;br /&gt;
c) if the current line contains a '::', we're documenting a method&lt;br /&gt;
d) if the next line has a '{', it's a function&lt;br /&gt;
&lt;br /&gt;
Like I said, it's pretty simple (read: stupid) but I'll enhance it later.&lt;br /&gt;
&lt;br /&gt;
After that, it's just a matter of populating the comments with the right data.&lt;br /&gt;
&lt;br /&gt;
Now, I did run into an interesting problem (which is where the majority of my day went). One thing I wanted to do was process all my method parameters and generate documentation for them.  So, the process for that went like this:&lt;br /&gt;
&lt;br /&gt;
1) generate an 'arguments' string.  This is essentially everything between the '(' and ')'.  This is a little problematic, because I need to deal with parameters that are spread across multiple lines.  This was pretty easy to do.  Then came stripping out the unnecessary characters (left and right trimming the '(' and ')' characters).  I figured that I could do a string replace for all '(' and ')' characters with a space.  Then use the Trim function in vb to strip out what I didn't want.  However, I noticed that I was still having spaces at the end of my string.  Or at least what I thought was spaces.  It took a while for me to realize that they were non-printable characters ( specifically, there was a carriage return embedded before my ')' ... which wasn't in the source file).  Anyway, there's a host of other reasons why I'd want to get rid of additional characters in my argument list, so I built a function that trimmed out additional 'fluff' characters, including tabs, line feeds, carriage returns and a few other non-printable characters).  And then Trimmed the results.  The code looks like this:&lt;br /&gt;
&lt;br /&gt;
First, creating the argument string:&lt;br /&gt;
&lt;pre class="brush: vb; bloggerMode: true"&gt;
' Get all the arguments from the method
Dim args As String
Dim linenumber As Integer
selection.SelectLine()
args = selection.Text

' strip off the method return/method name (everything before the '('
Dim argsarray() As String = Split(args, "(")
Dim nextline As String
args = argsarray(1)

While InStr(args, ")") = 0
selection.LineDown()
nextline = selection.Text
args = args &amp; nextline
End While

args = Replace(args, ")", " ")
args = TrimAll(args)
argsarray = Split(args, ",")
selection.GotoLine(linenumber)
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Second, the TrimAll function:&lt;br /&gt;
&lt;pre class="brush: vb; bloggerMode: true"&gt;
Function TrimAll(ByVal TextIn As String) As String
Try ' Replace ALL Duplicate Characters in String with a Single Instance
Dim result As String
result = Replace(TextIn, ")", " ")
result = Replace(result, vbTab, " ")
result = Replace(result, vbNullChar, " ")
result = Replace(result, vbCr, " ")
result = Replace(result, vbLf, " ")
result = Trim(result)
TrimAll = result

Catch Exp As Exception
TrimAll = TextIn ' Oops
End Try

Return TrimAll

End Function
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
2) tokenize the arguments.  VB has a 'split' function that breaks a string up into a string array based on a delimiter character.  So, to break it down into arguments, it's a matter of splitting on a ',' character.  After this, use VB's 'For Each' iterator to walk over the array of arguments and then tokenize each argument into another string array to get a list of types and variables.  Simply grabbing the last array element gives me my variable name, which I can then print out. &lt;br /&gt;
&lt;br /&gt;
OK.  So after all that, here's the full code listing.  Copy and paste into a new module.  You'll probably want to change the 'Ash Matheson' to something more appropriate.&lt;br /&gt;
---------------------------------------cut here------------------------------------&lt;br /&gt;
&lt;pre class="brush: vb; bloggerMode: true"&gt;
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics

Public Module Documentation
Function TrimAll(ByVal TextIn As String) As String

Try ' Replace ALL Duplicate Characters in String with a Single Instance
Dim result As String
result = Replace(TextIn, ")", " ")
result = Replace(result, vbTab, " ")
result = Replace(result, vbNullChar, " ")
result = Replace(result, vbCr, " ")
result = Replace(result, vbLf, " ")
result = Trim(result)
TrimAll = result

Catch Exp As Exception
TrimAll = TextIn ' Oops
End Try

Return TrimAll

End Function
Sub PerformDocumentation()
Try
Dim objTextDoc As TextDocument
Dim editPoint As EnvDTE.EditPoint
Dim selection As TextSelection

objTextDoc = DTE.ActiveDocument.Object("TextDocument")
editPoint = objTextDoc.StartPoint.CreateEditPoint
selection = objTextDoc.Selection
selection.StartOfLine()

If selection.ActivePoint.Line = 1 Then
GenerateFileHeader()
ElseIf selection.FindText("class") = True Then  'Class declaration
GenerateClassHeader()
ElseIf selection.FindText("::") = True Then     'Method definition
GenerateMethodHeader()
Else
selection.LineDown()
If selection.FindText("{") Then             'Some Function definition
selection.LineUp()
GenerateFunctionHeader()

End If
End If

Catch ex As Exception
Dim messagebox As System.Windows.Forms.MessageBox
messagebox.Show(ex.Message)

Finally

End Try
End Sub
Sub GenerateMethodHeader()
DTE.UndoContext.Open("MethodHeader")
Try
Dim selection As TextSelection
selection = DTE.ActiveDocument.Selection

' Get all the arguements from the method
Dim args As String
Dim linenumber As Integer
linenumber = selection.ActivePoint.Line
selection.SelectLine()

args = selection.Text

' strip off the method return/method name (everything before the '('
Dim argsarray() As String = Split(args, "(")
Dim nextline As String
args = argsarray(1)
While InStr(args, ")") = 0
selection.LineDown()
nextline = selection.Text
args = args &amp; nextline
End While
args = Replace(args, ")", " ")
args = TrimAll(args)

argsarray = Split(args, ",")

selection.GotoLine(linenumber)
selection.StartOfLine()
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// *********************************************************************"
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// @brief "
linenumber = selection.ActivePoint.Line ' This is where we want to return to
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// "
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// "
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// @return "

' now for our args
For Each arguement As String In argsarray
Dim tokenArray() As String
Dim character As Char

selection.NewLine()
selection.StartOfLine()

tokenArray = Split(Trim(arguement), " ")
selection.Text = "/// @param " &amp; tokenArray(tokenArray.Length - 1)

Next

selection.NewLine()
selection.StartOfLine()
selection.Text = "/// *********************************************************************"
selection.NewLine()

selection.GotoLine(linenumber)

Catch ex As Exception
Dim messagebox As System.Windows.Forms.MessageBox
messagebox.Show(ex.Message)

Finally
DTE.UndoContext.Close()
End Try

End Sub
Sub GenerateFunctionHeader()
DTE.UndoContext.Open("FunctionHeader")
Try
Dim selection As TextSelection
selection = DTE.ActiveDocument.Selection

' Get all the arguements from the method
Dim args As String
Dim linenumber As Integer
selection.SelectLine()
args = selection.Text

' strip off the method return/method name (everything before the '('
Dim argsarray() As String = Split(args, "(")
Dim nextline As String
args = argsarray(1)
While InStr(args, ")") = 0
selection.LineDown()
nextline = selection.Text
args = args &amp; nextline
End While
args = Replace(args, ")", " ")
args = TrimAll(args)

argsarray = Split(args, ",")

selection.NewLine()
selection.StartOfLine()
selection.Text = "/// *********************************************************************"
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// @brief "
linenumber = selection.ActivePoint.Line ' This is where we want to return to
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// "
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// "
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// @return "
' now for our args
For Each arguement As String In argsarray
Dim tokenArray() As String
Dim character As Char

selection.NewLine()
selection.StartOfLine()

tokenArray = Split(Trim(arguement), " ")
selection.Text = "/// @param " &amp; tokenArray(tokenArray.Length - 1)

Next
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// *********************************************************************"

selection.GotoLine(linenumber)

Catch ex As Exception

Finally
DTE.UndoContext.Close()
End Try

End Sub
Sub GenerateClassHeader()
DTE.UndoContext.Open("ClassHeader")
Try
Dim selection As TextSelection
Dim linenumber As Integer

selection = DTE.ActiveDocument.Selection

selection.StartOfLine()
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// *********************************************************************"
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// @brief "
linenumber = selection.ActivePoint.Line ' This is where we want to return to
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// "
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// "
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// *********************************************************************"
selection.NewLine()

selection.GotoLine(linenumber)
selection.EndOfLine()

Catch ex As Exception
Finally
DTE.UndoContext.Close()
End Try
End Sub
Sub GenerateFileHeader()
DTE.UndoContext.Open("Generate File Header")
Try
DTE.ActiveDocument.Selection.StartOfDocument()
Dim CurrentDate
CurrentDate = System.DateTime.Now.ToShortDateString()
Dim CurrentTime
CurrentTime = System.DateTime.Now.ToShortTimeString()
Dim Author = "Ash Matheson"
Dim FileType
Dim selection As TextSelection
selection = DTE.ActiveDocument.Selection

selection.Text = "/// Time-stamp: &lt;@(#)" &amp; ActiveDocument.Name &amp; "   " &amp; CurrentDate &amp; " - " &amp; CurrentTime &amp; "   " &amp; Author &amp; "&gt;"
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// *********************************************************************"
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// @file   : " &amp; ActiveDocument.Name
selection.NewLine()
selection.StartOfLine()
selection.Text = "///"
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// @author " &amp; Author
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// @date  " &amp; CurrentDate
selection.NewLine()
selection.StartOfLine()
selection.Text = "///"
selection.NewLine()
selection.StartOfLine()
If InStr(ActiveDocument.Name, ".h") &lt;&gt; 0 Then
FileType = "Declaration of class "
Else
FileType = "Implementation of methods for class "
End If
selection.Text = "///  Purpose : " &amp; FileType
selection.NewLine()
selection.StartOfLine()
selection.Text = "///"
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// @brief "
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// *********************************************************************"
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// Version History:"
selection.NewLine()
selection.StartOfLine()
selection.Text = "///"
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// V 0.10  " &amp; CurrentDate &amp; "  BN : First Revision"
selection.NewLine()
selection.StartOfLine()
selection.Text = "///"
selection.NewLine()
selection.StartOfLine()
selection.Text = "/// *********************************************************************"
selection.NewLine()
selection.StartOfLine()
selection.NewLine()
selection.NewLine()

Catch ex As Exception
Dim messagebox As System.Windows.Forms.MessageBox
messagebox.Show(ex.Message)

Finally
DTE.UndoContext.Close()
End Try

End Sub

End Module
&lt;/pre&gt;&lt;br /&gt;
---------------------------------------cut here------------------------------------&lt;br /&gt;
linkage, for downloading: &lt;a href="http://ash.matheson.googlepages.com/Documentation.rar"&gt;link&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-3449571852314582688?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/3449571852314582688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=3449571852314582688' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/3449571852314582688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/3449571852314582688'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2008/11/doxygen-and-dev-studio.html' title='DOxygen and Dev Studio'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-6668638909666167044</id><published>2008-11-13T12:08:00.002-08:00</published><updated>2008-11-13T12:11:04.242-08:00</updated><title type='text'>Off to Unemployment land I go</title><content type='html'>So, today I got the big "Heave Ho" at Hothead. Yay.  Great timing just before Christmas.  But what are you gonna do?

Anyway, I thought that during this time off, I'd journal the process, since it's been a very, very long time since I've been on this side of the employment fence.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-6668638909666167044?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/6668638909666167044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=6668638909666167044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/6668638909666167044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/6668638909666167044'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2008/11/off-to-unemployment-land-i-go.html' title='Off to Unemployment land I go'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-5029499646192595530</id><published>2008-06-25T16:49:00.002-07:00</published><updated>2008-11-29T08:57:52.919-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perforce'/><title type='text'>Perforce and figuring out what you've got</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Perforce can be pretty great.  And sometimes it can be just ass.  Here's an example:&lt;br /&gt;
I want to know what my current changelist is.  There's no visual tool to find out (maybe there is in the new, Java based tool that is complete and utter ASS, but I refuse to use it).  So you have to go to the command line.  And it's pretty esoteric:&lt;br /&gt;
&lt;pre&gt;p4 changes -m1 #have&amp;lt;br /&amp;gt;&lt;/pre&gt;&lt;br /&gt;
Without the #have option, what you get it pretty much useless.  And it's poorly documented that you need to have the #have option (#have isn't even documented, from what I can tell).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-5029499646192595530?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/5029499646192595530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=5029499646192595530' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/5029499646192595530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/5029499646192595530'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2008/06/perforce-and-figuring-out-what-you-got.html' title='Perforce and figuring out what you&amp;#39;ve got'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-343551862141355104</id><published>2008-05-14T14:26:00.001-07:00</published><updated>2008-05-14T14:26:20.454-07:00</updated><title type='text'>On Zen and Music</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;So, a couple of weekends ago, I reformatted my home machine.  No biggie, got everything situated nicely. And I think I'm good to go.&lt;br/&gt;&lt;br/&gt;Then I try to hook my my Creative Labs Zen Vision M: 30 to it.&lt;br/&gt;&lt;br/&gt;No amount of tomfoolery could get my pc to recognize it.  None.  I was completely flabbergasted by this.  I had no idea what was wrong with it.&lt;br/&gt;&lt;br/&gt;That is, until I realized that it was looking for an MTC driver.  Which, after some digging, is only distributed with Windows Media player.&lt;br/&gt;&lt;br/&gt;So, in order for my MP3 player to connect to my XP PC, I have to install Windows Media player (Version 10 and up).&lt;br/&gt;&lt;br/&gt;That, my good friends, is completely retarded.  I can't even grab the appropriate drivers from Creative Labs because *they don't exist*.&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-343551862141355104?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/343551862141355104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=343551862141355104' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/343551862141355104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/343551862141355104'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2008/05/on-zen-and-music.html' title='On Zen and Music'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-585769867688104340</id><published>2008-05-01T09:42:00.001-07:00</published><updated>2008-05-01T09:42:43.587-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cygwin'/><category scheme='http://www.blogger.com/atom/ns#' term='Utilities'/><category scheme='http://www.blogger.com/atom/ns#' term='Shell Replacement'/><title type='text'>Cygwin command</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;So, I've been using Cygwin + putty for the last couple of years (it's a much better replacement for a shell than cmd.exe), but one thing has been annoying me about it.  For the life of me, I couldn't figure out how to clear the screen.&lt;br/&gt;&lt;br/&gt;That is, until today, when I accidentally pressed "Ctrl + L" at the same time.  Voila, clear screen.&lt;br/&gt;&lt;br/&gt;Some testing shows that it also works on the plain Jane Cygwin terminal as well.  Shame I hadn't figured that out earlier.&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-585769867688104340?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/585769867688104340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=585769867688104340' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/585769867688104340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/585769867688104340'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2008/05/cygwin-command.html' title='Cygwin command'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-1650420566777660726</id><published>2008-01-09T08:11:00.001-08:00</published><updated>2008-01-09T09:42:20.053-08:00</updated><title type='text'>Look! Two Updates in a week</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;So, a little news about the studio I work at.&lt;br/&gt;&lt;br/&gt;[edit:]  Gamasutra linkage here:&lt;br/&gt;&lt;br/&gt;&lt;a href='http://www.gamasutra.com/php-bin/news_index.php?story=16883'&gt;http://www.gamasutra.com/php-bin/news_index.php?story=16883&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Via the Hothead Newspage:&lt;br/&gt;&lt;br/&gt;&lt;font class='normaltextarial'&gt;&lt;a href='http://www.hotheadgames.com/news15.php?ref=inside' title='http://www.hotheadgames.com/news15.php?ref=inside' target='_blank'&gt;http://www.hotheadgames.com/news15.php?ref=inside&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Annnnd ... &lt;br/&gt;&lt;br/&gt;&lt;a href='http://grumpygamer.com/8519854' title='http://grumpygamer.com/8519854' target='_blank'&gt;http://grumpygamer.com/8519854&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;That's right.  Ron Gilbert's our new Creative Director.  I'm really, really stoked about this.&lt;br/&gt;&lt;br/&gt;Very interesting times to come, folks.&lt;br/&gt;&lt;/font&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-1650420566777660726?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/1650420566777660726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=1650420566777660726' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/1650420566777660726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/1650420566777660726'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2008/01/look-two-updates-in-week.html' title='Look! Two Updates in a week'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-2439185275738123906</id><published>2008-01-08T18:27:00.001-08:00</published><updated>2008-01-08T18:28:22.434-08:00</updated><title type='text'>So, now that I've finally got Rock Band ...</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I get this link this morning:&lt;br/&gt;&lt;br/&gt;&lt;a class='moz-txt-link-freetext' href='http://www.gearlog.com/2008/01/guitar_hero_air_guitar_rocker.php'&gt;http://www.gearlog.com/2008/01/guitar_hero_air_guitar_rocker.php&lt;/a&gt;&lt;br/&gt;    &lt;br/&gt;&lt;br/&gt;In short, it's a belt buckle that has a 'virtual' pick that when you strum over it, it plays a bit of music.  Like you're playing guitar. And it's being shipped in March.&lt;br/&gt;&lt;br/&gt;I think I want this.  Just to annoy the crazies on the Skytrain.&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-2439185275738123906?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/2439185275738123906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=2439185275738123906' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/2439185275738123906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/2439185275738123906'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2008/01/so-now-that-i-finally-got-rock-band.html' title='So, now that I&amp;#39;ve finally got Rock Band ...'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-1962519397791502103</id><published>2007-11-29T17:13:00.001-08:00</published><updated>2007-11-29T17:14:21.435-08:00</updated><title type='text'>Battleships Forever</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Now this ( http://www.wyrdysm.com/games.php ) looks like a really, really kick ass game.  &lt;br/&gt;&lt;br/&gt;One of the designers had it running on their computers today when I came back from the gym this afternoon.&lt;br/&gt;&lt;br/&gt;This is the kind of game that makes me realize that working on Independent games is really the right way to go.&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-1962519397791502103?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/1962519397791502103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=1962519397791502103' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/1962519397791502103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/1962519397791502103'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2007/11/battleships-forever.html' title='Battleships Forever'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-4263583269705841399</id><published>2007-08-26T09:24:00.001-07:00</published><updated>2007-08-26T09:24:14.810-07:00</updated><title type='text'>A Rather Interesting Read</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;So, reading &lt;a href='http://scientificninja.com/advice/performant-singletons'&gt;The Scientific Ninja&lt;/a&gt;, there is an article on why not to use singletons.&lt;br/&gt;&lt;br/&gt;It's an interesting read about about why singletons are bad.  Of course it goes overboard (Singletons are bad, will eat babies, etc, etc) but there are a couple of interesting points.  I'm currently working with a codebase that is next to impossible to isolate into it's own module.  For instance, one thing I wanted to do, as a test, was isolate the math codebase as it's own library.  Doing this has proven to be a next to impossible task due to interdependencies that in my opinion shouldn't be there.&lt;br/&gt;&lt;br/&gt;But in my opinion, there *are* a couple of systems in which a singleton *does* make sense.  One that comes to mind immediately is a Resource manager.&lt;br/&gt;&lt;br/&gt;A Resource Manager:  To me, this is a prime candidate for the singleton pattern.  Simply because, in a *game* there are enough subsystems that having global access to a well-referenced (and by well referenced I mean reference counted) system system for accessing assets, being able to hotload them and en does make sense.&lt;br/&gt;&lt;br/&gt;I do have to say that the article has made me think a little harder about the use of a singleton.  I have never liked the inability to definitely control it's lifetime (you can use some hacks to *mostly* clean up your singleton, but by definition there is always something left kicking around) but it's never stopped me from using it if I saw a system that would be of benefit from it. It does remind us that as programmers we still tend to go for the 'when all you have is a hammer, everything looks like a nail' idiom.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p class='poweredbyperformancing'&gt;Powered by &lt;a href='http://scribefire.com/'&gt;ScribeFire&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-4263583269705841399?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/4263583269705841399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=4263583269705841399' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/4263583269705841399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/4263583269705841399'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2007/08/rather-interesting-read.html' title='A Rather Interesting Read'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-5889849043736939916</id><published>2007-07-28T12:48:00.001-07:00</published><updated>2007-07-28T12:48:57.045-07:00</updated><title type='text'>Well now</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Completely non-programming related.&lt;br/&gt;&lt;br/&gt;Interesting little news blurb.  Apparently there is going to be a 'rebirth' of the TV series 'Reboot'.  This could be kinda interesting as I was a fan of the original series (even with it's crappy CG).  &lt;a href='http://alpha.zeros2heroes.com'&gt;Zeros 2 Heros&lt;/a&gt; has the info on it &lt;a href='http://alpha.zeros2heroes.com/content/view/32/97/'&gt;here&lt;/a&gt;. &lt;br/&gt;&lt;br/&gt;No timeline yet, but I'm waiting for it, like I'm waiting for new episodes of Futurama.&lt;br/&gt;&lt;a href='http://alpha.zeros2heroes.com/content/view/32/97/'&gt;&lt;br/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-5889849043736939916?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/5889849043736939916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=5889849043736939916' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/5889849043736939916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/5889849043736939916'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2007/07/well-now.html' title='Well now'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-3855054213852742610</id><published>2007-05-30T11:26:00.001-07:00</published><updated>2007-06-24T11:51:48.887-07:00</updated><title type='text'>Some Corporate news</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Every once in a while, it's nice to see your company in the news.&amp;amp;nbsp; Gamasutra just did an article on us and it's quite good. Check it out &lt;a href='http://www.gamasutra.com/php-bin/news_index.php?story=14135'&gt;here&lt;/a&gt;.&lt;br&gt;&lt;/br&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-3855054213852742610?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/3855054213852742610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=3855054213852742610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/3855054213852742610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/3855054213852742610'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2007/05/some-corporate-news.html' title='Some Corporate news'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-3303848576066302792</id><published>2007-03-28T11:04:00.001-07:00</published><updated>2007-04-10T08:45:29.479-07:00</updated><title type='text'>More non-programming related</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;If you're like me, you use an electronic calendar of some sorts.

As well, if you're like me, you hate outlook with a passion.

Well, I've found an alternative. It's called Sunbird. It's from mozilla (firefox). And it works really nicely with my other calendar application of choice, Google Calendar.

Install &lt;a href="http://www.mozilla.org/projects/calendar/sunbird/"&gt;Sunbird&lt;/a&gt;, then follow &lt;a href="http://www.start.com.my/blog/subscribe-to-a-google-calendar-using-sunbird/"&gt;these &lt;/a&gt;instructions. And you'll see what I mean.

-- edit --

As an update to that, there's also &lt;a href="https://addons.mozilla.org/en-US/thunderbird/addon/2313"&gt;lightning&lt;/a&gt;, which adds sunbird functionality directly into Thunderbird.  That's what I'm talking about!

&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-3303848576066302792?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/3303848576066302792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=3303848576066302792' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/3303848576066302792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/3303848576066302792'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2007/03/more-non-programming-related_28.html' title='More non-programming related'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-6117499360810361515</id><published>2007-03-22T09:15:00.005-07:00</published><updated>2008-11-29T09:01:09.624-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perforce'/><category scheme='http://www.blogger.com/atom/ns#' term='Dev Studio'/><title type='text'>Perforce integration in Dev Studio sucks</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I just wanted to say that. Because it does. I have &lt;b&gt;never&lt;/b&gt; had a decent Dev Studio set up where perforce integrated nicely and did what I wanted it to do.

I mean, all that I want to do is check out a file. That's it. I don't need any reporting in Dev Studio. The perforce client does that for me, and quite nicely too. And getting revision history? I use the perforce client for that as well.

So, I wrote a little macro that checks out files for me.

&lt;pre name="code" class="Vb" &gt;
Imports System
Imports EnvDTE
Imports EnvDTE80
Imports System.Diagnostics

Public Module Perforce
    Public Sub p4CheckoutCurrentFile()
        Dim Command = "p4 edit " + DTE.ActiveDocument.FullName

        Shell(Command, AppWinStyle.NormalFocus)
    End Sub
End Module
&lt;/pre&gt;

That's all that there is to it. You can set up Dev Studio to not allow you to edit read-only files, and you're golden. I bind this macro to Ctrl+Alt+P. When I'm ready to check stuff in, I switch over to the Perforce Client, review my changes and bam, fire it off.

I did actually download the P4 sdk, so at some point in time, I may make this an actual plugin.

&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-6117499360810361515?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/6117499360810361515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=6117499360810361515' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/6117499360810361515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/6117499360810361515'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2007/03/perforce-integration-in-dev-studio.html' title='Perforce integration in Dev Studio sucks'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-4817242681388465051</id><published>2007-03-02T07:42:00.001-08:00</published><updated>2007-04-10T08:46:54.713-07:00</updated><title type='text'>Not really a technical post this time ...</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;If you read this, and you know me even a little, I'm pretty passionate about games and how they relate and affect kids. Having three of my own does that.

So, there's a new study out that is of interest to me. It's from the American Sociological Association. It's &lt;a href="http://www.asanet.org/cs/killervideogameskillerkids"&gt;here&lt;/a&gt; (with the body of the document &lt;a href="http://www.asanet.org/galleries/default-file/Winter07ContextsFeature.pdf"&gt;here&lt;/a&gt;) and absolutely worth the read, regardless as to weather you agree with the conclusions or not.

So, go forth and take a gander. Tell me what you think.
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-4817242681388465051?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/4817242681388465051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=4817242681388465051' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/4817242681388465051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/4817242681388465051'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2007/03/not-really-technical-post-this-time.html' title='Not really a technical post this time ...'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-5972715698044031512</id><published>2007-02-25T12:33:00.006-08:00</published><updated>2009-07-21T13:44:34.447-07:00</updated><title type='text'>C Sharp, Unmanaged DLLs and Python Avoidance</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;First off, let me say that I'm not anti-python. Far from it. I think Python is a very interesting language and has a great deal of use in game development.&lt;br /&gt;
&lt;br /&gt;
However, trying to build visual tools for it sucks. There are some decent alternatives out there for GUI builders for python, like boa, but none of them have the level of ease of use as Dev Studio. And I've never been sold on QT, especially the licensing agreement that they've created for us windows users (it's honestly like they're purposefully making it hard for us because we're windows users).&lt;br /&gt;
&lt;br /&gt;
So I've been playing around with CSharp, for tool development. And I've got to say, I like it a lot. I'm still getting the language intrinsics down, but so far, it's been a nice, easy move.&lt;br /&gt;
&lt;br /&gt;
However, a lot of our internal tools at HotHead are done using unmanaged DLLs and Swig bindings to Python. Again, this isn't bad. It's just different.&lt;br /&gt;
&lt;br /&gt;
What I want to do is use the existing DLLs that our asset pipeline uses via Python bindings, but with CSharp. And it's relatively painless. So I thought I would share my experience here.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Please note, there isn't any work related code in this example. This was all done at home, on my own time, yadda yadda legal mumbo jumbo.&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
First off, I needed to create a DLL that I would use as my test bed. Using Dev Studio 2005, creating a DLL project automatically injects the appropriate Managed code bindings. I don't want that, so I had to prune them out. What I was left with was the following source file:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: cpp; bloggerMode: true"&gt;
// This is a simple DLL that can be invoked from any language
// supporting standard DLL exports
#pragma warning(disable: 4996)

static char *buffer;

char* __stdcall DecorateString(unsigned int level, char* srcString)
{
   switch( level )
   {
      case 0:
         sprintf(buffer, "{Warn} %s\n", srcString);
         break;
      case 1:
         sprintf(buffer, "{Error} %s\n", srcString );
         break;
      default:
         sprintf(buffer, "{Undefined} %s\n", srcString );
         break;
   }
   return;
}

BOOL __stdcall DllMain(HINSTANCE hInst, DWORD dwReason, LPVOID resvd)
{
   switch(dwReason)
   {
      case DLL_PROCESS_ATTACH:
         buffer = new char[1000];
         memset(buffer,0,1000);
         printf("CPPDLL loaded\n");
         return TRUE;
      case DLL_PROCESS_DETACH:
         delete [] buffer;
         printf("CPPDLL unloaded\n");
         return TRUE;
      default:
         return FALSE;
   }
}
&lt;/pre&gt;&lt;br /&gt;
It's nothing more than a DLL function that allows me to decorate a string with either a '{Warn}' or '{Error}' string, depending on the value passed in on the first argument. This could have done other fancy things, like colour coded the output, but you get the idea.&lt;br /&gt;
&lt;br /&gt;
Additionally, I'm going to need a module definition file for this project, defining the exported functions. It looks like this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: cpp; bloggerMode: true"&gt;
LIBRARY "CPPDLL"
EXPORTS
   DecorateString @1
   DllMain @2
&lt;/pre&gt;&lt;br /&gt;
Finally, I need a CSharp application that uses this. I'm essentially going to create a default CSharp project and add some small bits of code to it. I won't go into the details of creating the form, since all I did was run the default project wizard. The code that actually allows me to do the binding to the dll file looks like this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: csharp; bloggerMode: true"&gt;
using System;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.Windows.Forms;

namespace cppdlluser
{
   static class Program
   {
      [DllImport("cppdll.dll")]
      [return:MarshalAs(UnmanagedType.LPStr)]

      public static extern String DecorateString(int level, String msg);

      ///  The main entry point for the application.
      ///  [STAThread]
      static void Main()
      {
         Console.WriteLine(DecorateString(0, "This is a warning."));
         Console.WriteLine(DecorateString(1, "This is an error"));
         Application.EnableVisualStyles();
         Application.SetCompatibleTextRenderingDefault(false);
         Application.Run(new Form1());
      }
   }
}
&lt;/pre&gt;&lt;br /&gt;
The form that is created doesn't do anything, but the output spew in the debug console shows the following:&lt;br /&gt;
&lt;br /&gt;
&lt;pre &gt;   The thread 0x8c4 has exited with code 0 (0x0).
   The thread 0xe64 has exited with code 0 (0x0).
   The thread 0xb70 has exited with code 0 (0x0).
   'cppdlluser.vshost.exe' (Managed): Loaded 'D:\development\CSharp\CPPDLLFromCSharp\cppdlluser\bin\Debug\cppdlluser.exe',     Symbols loaded.
   {Warn} This is a warning.
   {Error} This is an error
   CPPDLL loaded
   CPPDLL unloaded
   The thread 0xae8 has exited with code 0 (0x0).
   The thread 0xb54 has exited with code 0 (0x0).
   The thread 0x150 has exited with code 0 (0x0).
&lt;/pre&gt;&lt;br /&gt;
That's pretty much all there is to accessing functions from CSharp. I'm now off to try this using some of our production tool dlls. More on that later.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-5972715698044031512?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/5972715698044031512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=5972715698044031512' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/5972715698044031512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/5972715698044031512'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2007/02/c-sharp-unmanaged-dlls-and-python.html' title='C Sharp, Unmanaged DLLs and Python Avoidance'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-8059075622294879849</id><published>2007-01-30T17:36:00.001-08:00</published><updated>2007-01-30T17:44:04.817-08:00</updated><title type='text'>Python and OpenGL</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;So, I've just spent a good piece of today trying to get Python and OpenGL to work (stuff I'm trying to do in order to prep myself for the new job). I'll blame it on my lack of experience in Python, but man oh man, it wasn't an easy deal.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;1. So, I grab what I think is the right download and follow the instructions given on the site. I then run the test apps. No dice.&lt;br&gt;&lt;/br&gt;2. I think "OK, it must be me, missing something", so I go digging around trying to find any information on what it might be. No dice there either.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;I finally find the 'easy install' utility from PEAK and eventually I find that there is a difference between the OpenGL bindings and the pyOpenGL util (that I've been using). The difference being is that the OpenGL version WORKS.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;However, on the plus side, I also managed to get wxPython installed and working as well.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;*-----------edit-------------------------*&lt;br&gt;&lt;/br&gt;So, after a bit of digging, I figured out what it was. Both versions of the OpenGL bindings use GLUT. This isn't a bad thing (well, it could be considered a bad thing, but I digress) if you install the glut32.dll file into your python's DLL folder, it doesn't work. It must reside in the system32 folder. Not sure who to blame on that one ... I'd like to blame Python for it, but I'm not sure I could realistically do that.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-8059075622294879849?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/8059075622294879849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=8059075622294879849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/8059075622294879849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/8059075622294879849'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2007/01/python-and-opengl.html' title='Python and OpenGL'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-1139592806017045542</id><published>2007-01-23T18:55:00.001-08:00</published><updated>2007-01-23T18:55:23.500-08:00</updated><title type='text'>Personal Update</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I'm now in-between jobs. Today was my last day at Radical Entertainment.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;I feel good about this. I have a fairly good feeling about where I'm going next.&lt;br&gt;&lt;/br&gt;&lt;br&gt;&lt;/br&gt;I'll post more as the situation progresses.&lt;br&gt;&lt;/br&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-1139592806017045542?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/1139592806017045542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=1139592806017045542' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/1139592806017045542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/1139592806017045542'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2007/01/personal-update.html' title='Personal Update'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-344512298232254512</id><published>2007-01-10T22:22:00.001-08:00</published><updated>2007-01-11T10:52:35.340-08:00</updated><title type='text'>More Free Stuff</title><content type='html'>I like vi. And vim, too.

But somedays, I like my editor to be a little more ... friendly.

But I still like it to be context sensitive, colour coded and all the jazzy neat stuff that all the other programmers rant and rave about in their editors.

So, I was quite happy to find Notepad++, a sourceforge project. It's quite nice, does everything I want it to do and it's free. So it's good for all my lua editing work.

Edit: And it's also based on the Scite text editor engine.  I'm a fan of Scite, but Notepad++ adds a nice polish on top of it.

It's fairly lightweight, so go on and give it a try: &lt;a href="http://notepad-plus.sourceforge.net/uk/site.htm"&gt;Notepad++&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-344512298232254512?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/344512298232254512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=344512298232254512' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/344512298232254512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/344512298232254512'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2007/01/more-free-stuff.html' title='More Free Stuff'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-591457751823778053</id><published>2006-12-23T18:36:00.001-08:00</published><updated>2006-12-23T18:38:38.462-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools and Utilities'/><title type='text'>Blogging Tools</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Over the Christmas holidays, I thought I'd spend a little time getting back into the 'blog' spirit. Kind of a new years resolution of sorts. I also wanted to make my blogging a little less painful ( I wasn't a fan of the interface to bloggers toolset and sending emails just was a bit of a pain ). So, I decided that I'd go surfing for some tools. I've found one that's interesting and I thought I'd share.



It's a plug in for Firefox (my browser of choice) called 'Performancing' (&lt;small&gt;&lt;a href="http://performancing.com/firefox"&gt;link&lt;/a&gt;&lt;/small&gt;).



Here's why I like it. A lot of times while I'm blogging, I'm usually referencing another site. This blogging tool resides in a split window in firefox, allowing me to browse the web, grab links and just generally work the way that I want to work.



So far, it does everything that I want it to do. If you're like me and post occasionally to your blog, you may want to check it out.
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-591457751823778053?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/591457751823778053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=591457751823778053' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/591457751823778053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/591457751823778053'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2006/12/blogging-tools.html' title='Blogging Tools'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-116270403370834629</id><published>2006-11-04T21:17:00.000-08:00</published><updated>2006-11-04T21:20:33.716-08:00</updated><title type='text'>Dev Studio ramblings</title><content type='html'>I love Dev Studio.

No, seriously, I do.  Not in that 'dark lights and smooth music' kinda way, but in the "let's split a cab fare to get to where we're going" kinda way.

But one of the things I don't like about it is the ability, or more properly, the inability to set up the coloration in a nice format.  Actually, I'd like other people to do it for me, let me tweak it to my likings and claim it as my own!

An lo an behold, I've found a site that is doing just that, for Dev Studio 2005. &lt;a href="http://idehotornot.ning.com/"&gt;IDEHotOrNot.ning.com&lt;/a&gt;.  Now, given that there aren't a lot of themes up there now, but it is a start.  And a fairly decent one too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-116270403370834629?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/116270403370834629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=116270403370834629' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/116270403370834629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/116270403370834629'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2006/11/dev-studio-ramblings.html' title='Dev Studio ramblings'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-116114840369729875</id><published>2006-10-17T22:02:00.000-07:00</published><updated>2006-10-17T22:14:38.273-07:00</updated><title type='text'>Freebies!</title><content type='html'>I'm always on the lookout for free things.  The last couple of days I've found a couple of freebies that I don't know how I've lived without.  Or at least that's my excuse for posting!

First on the block is a little utility called Colibri.  If you're a Mac user, you've probably heard of a tool like this called QuickSilver.  It's pretty damn cool.  Essentially, it's a thin version of Google Desktop, but it only parses your registry/installed executable files.  Once installed, you can activate it by pressing "Ctrl+space" then typing in the name of the application to launch.  For instance 'Fir' for "Firefox" or "not" for "Notepad".  Really quick for me, since I tend not to use the mouse for much if I can get away with it.  Linkage is here: &lt;a href="http://colibri.leetspeak.org/ "&gt;http://colibri.leetspeak.org/&lt;/a&gt;

Next up is a really, REALLY cool plugin for Explorer.  If you're like me, you usually have a command prompt open most of the time. This little extension for Explorer essentially embeds a command prompt &lt;span style="font-style:italic;"&gt;directly into the explorer window&lt;/span&gt;.  I can't stress how cool this is. Linkage is here: &lt;a href="http://www.codeproject.com/csharp/commandbar.asp?df=100&amp;forumid=4006&amp;exp=0&amp;select=1163606"&gt;CodeProject link&lt;/a&gt;

I'm looking at a few others right now.  More to come, I do believe!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-116114840369729875?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/116114840369729875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=116114840369729875' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/116114840369729875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/116114840369729875'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2006/10/freebies.html' title='Freebies!'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-115998413204940126</id><published>2006-10-04T10:48:00.000-07:00</published><updated>2006-10-04T10:48:52.406-07:00</updated><title type='text'>Rondam Ramblings: Top ten geek business myths</title><content type='html'>Every once in a while, I get sent a link that re-empahsizes why I'm never going to go into buisness for myself.
&lt;a href="http://rondam.blogspot.com/2006/10/top-ten-geek-business-myths.html"&gt;Rondam Ramblings: Top ten geek business myths&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-115998413204940126?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/115998413204940126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=115998413204940126' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/115998413204940126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/115998413204940126'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2006/10/rondam-ramblings-top-ten-geek-business.html' title='Rondam Ramblings: Top ten geek business myths'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-115966171224415164</id><published>2006-09-30T17:02:00.000-07:00</published><updated>2006-09-30T17:15:12.253-07:00</updated><title type='text'>Variax and Line 6</title><content type='html'>No, I don't just develop games.  I actually play a fair bit of guitar.

A couple of weeks ago, I was at Tom Lee Music in Downtown Van.  Apparntly Line 6 (makes awesome amps and amp simulators) had released a while back a new guitar line called the 'Variax'.  What's different about these guitars?  They have no traditional pickups.  What they have is a set of digital piezo pickups mounted into the bridge that work on a string by string basis.

What's that mean?  If you've ever tried doing the old "Midi Guitar/Guitar synth" route as I did when I was a kid, it means that you've essentially a digital system for modelling on a string by string basis the tonality of any guitar.  Want to change the tuning of your guitar, without actually changing the tuning of your guitar?  Just model the tuning that you're interested and away you go.  Want to have the guitar sound like a 12 string?  Again, just model that behaviour.

It's a bit pricy, and I didn't like the way the one I played felt, but it was the bottom of the line model.  And you have to pick up a fair bit of extras in order to get the most out of this guitar.  But it really has some interesting potential.  Check it out at: &lt;a href="http://line6.com/variax/overview.html"&gt;http://line6.com/variax/overview.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-115966171224415164?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/115966171224415164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=115966171224415164' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/115966171224415164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/115966171224415164'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2006/09/variax-and-line-6.html' title='Variax and Line 6'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-114600804384091150</id><published>2006-04-25T16:33:00.000-07:00</published><updated>2006-04-25T16:35:46.393-07:00</updated><title type='text'>Code Monkey</title><content type='html'>I'm actually very impressed by this guy's work.  Makes me want to start playing some more:

&lt;a href="http://www.jonathancoulton.com/2006/04/14/thing-a-week-29-code-monkey/"&gt;http://www.jonathancoulton.com/2006/04/14/thing-a-week-29-code-monkey/&lt;/a&gt;

Go.  Buy the song.  Thus commands Ash.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-114600804384091150?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/114600804384091150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=114600804384091150' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/114600804384091150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/114600804384091150'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2006/04/code-monkey.html' title='Code Monkey'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-114574730715585048</id><published>2006-04-22T16:02:00.000-07:00</published><updated>2006-04-22T16:08:30.126-07:00</updated><title type='text'>More free stuff</title><content type='html'>So, I've borrowed a laptop from work.

But there isn't any photo editing software on it.  So, I go digging around the web looking for something.  The urge to grab JASC's Paint Shop Pro (which is now owned by Corel ... jeez, are they still around?) was high.  But out of pure luck, I found this:  http://www.eecs.wsu.edu/paint.net/

Essentially, some folks over at WSU decided to build a little (little, he says ...) Paint and photo editing software package.  And so far, it's pretty decent.

OK, so before all you linux folks out there (are there any linux folks out there reading this???) jump all over me and tell me to use "The Gimp", I've been there, I've done that and I've burned the T-shirt.  Gimp was one of the least friendly packages that I've used for quick little editing jobs.  So far, this puppy has been everything that I want.  So go check it out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-114574730715585048?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/114574730715585048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=114574730715585048' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/114574730715585048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/114574730715585048'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2006/04/more-free-stuff.html' title='More free stuff'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-114555127407141055</id><published>2006-04-20T09:40:00.000-07:00</published><updated>2006-04-20T09:41:14.096-07:00</updated><title type='text'>Very interesting blog</title><content type='html'>Worth the read.  Definetly sums up the feelings I have about the game industry in general.

http://lostgarden.com/2006/04/joyful-life-of-lapsed-game-developer.html

But I still stick with it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-114555127407141055?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/114555127407141055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=114555127407141055' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/114555127407141055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/114555127407141055'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2006/04/very-interesting-blog.html' title='Very interesting blog'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-114525016003758052</id><published>2006-04-16T21:59:00.000-07:00</published><updated>2006-04-16T22:04:55.740-07:00</updated><title type='text'>Test Driven Design</title><content type='html'>One of the things that has been bothering me a lot about TDD is just how to get things started. Specifically, directory setup as well as compiler setup. I'm in the process of putting some ideas together to test out some processes. The web's pretty much useless to help me out here. Noel's blogspot (&lt;a href="http://www.gamesfromwithin.com"&gt;www.gamesfromwithin.com&lt;/a&gt;) has links to UnitTest++, but there really aren't any good examples of how to do this, in practice. I really wish he had distributed not just the source code to his GDC presentation, but the actual project files that went along with it.

Anyway, as I progress with this, I'll post more results.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-114525016003758052?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/114525016003758052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=114525016003758052' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/114525016003758052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/114525016003758052'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2006/04/test-driven-design.html' title='Test Driven Design'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-113816075862968934</id><published>2006-01-24T19:40:00.000-08:00</published><updated>2006-04-16T22:05:12.016-07:00</updated><title type='text'>I've been debating lately ...</title><content type='html'>Is making a book really worth it? Seriously. The main reason why a lot of folks write books is to get self-recognition. And I have to say that may be one of the main reasons why I was thinking about writing the book. Sure, there's not a lot of good books out there (and absolute horrible sucking VOID of books), but would I actually be adding anything to the mix?

Maybe the best thing to do would be to just experiment on my own and post results to this blog. I mean, I was thinking there may be a bit of income from writing a book, but it definetly wouldn't be a huge amount of money. I mean, I *still* want to do something. I just don't want to spend the years it will take to write something all-encompassing.

I dunno. Lots ant lots to think about. However, at this point in time, I'd say that the book is currently on hold.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-113816075862968934?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/113816075862968934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=113816075862968934' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/113816075862968934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/113816075862968934'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2006/01/ive-been-debating-lately.html' title='I&apos;ve been debating lately ...'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-113104298324492517</id><published>2005-11-03T10:36:00.000-08:00</published><updated>2005-11-03T10:36:23.246-08:00</updated><title type='text'>Slow in posting</title><content type='html'>&lt;span style="font-weight: bold;"&gt;What I've been up to&lt;/span&gt;&lt;br&gt; Life's been a bit hectic in the development arena.&lt;br&gt; &lt;br&gt; On the 21st of October I got a warning that I might be called on to do a PSP Demo (for Kiosks).&amp;nbsp; The following monday it was confirmed, with a pretty aggressive schedule. But, the hard part is now over, so life should get back to something resembling normal.&lt;br&gt; &lt;br&gt; &lt;span style="font-weight: bold;"&gt;Some thoughts&lt;/span&gt;&lt;br&gt; Yesterday, I was talking to Colin, the coder that sits beside me.&amp;nbsp; We got talking about Dev Studio and some features we'd like to see.&amp;nbsp; Recently, I've been playing with using vim for text editing (Working on multiple PSP branches made me realize that Dev Studio might not be the best place to live).&amp;nbsp; Anyway, one thing that came up in the &amp;quot;What's missing in Dev Studio&amp;quot; discussion was the lack of control over colour schemes.&amp;nbsp; More specifically, the lack of ability to get a decent colour layout from a 'central theme repository&amp;quot; a la Deviant Art or some other desktop customization place.&lt;br&gt; &lt;br&gt; This made me remember my old days of working with Borlands Turbo C++ and the fact that they used to have colour 'themes' for their code colorization.&amp;nbsp; And this also got me thinking about how difficult/easy it might be to add a feature like this to Dev Studio (2003 and 2005).&amp;nbsp; So, as part of my pet project list, I think that would be a worth while time sink.&lt;br&gt; &lt;br&gt; Now if I could just find those old colour schemes from Turbo C++ ...&lt;br&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-113104298324492517?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/113104298324492517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=113104298324492517' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/113104298324492517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/113104298324492517'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2005/11/slow-in-posting.html' title='Slow in posting'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-112723354125118187</id><published>2005-09-20T09:25:00.000-07:00</published><updated>2005-09-20T09:25:41.270-07:00</updated><title type='text'>Stuff not to do when creating an installer ...</title><content type='html'>So, my project is all but finished (unless Sony comes back and wants us to change things, which they probably will).&lt;br&gt; &lt;br&gt; And I have a routine where I go about and clear up my Hard Drive of wasted space.&amp;nbsp; There's lots of it.&amp;nbsp; There's a cool little program (when it's not crashing) called spacemonger (google for it ... you know you wanna) that gives you a quad tree based layout of your Hard Drive based on file/directory size.&amp;nbsp; This is cool, and it pointed out several folders with a huge amount of wasted space.&lt;br&gt; &lt;br&gt; Now, aside from the bloat sitting in the Internet Explorer temporary folders, I also noticed a fair bit of bulk residing in temporary 'installer' folders.&amp;nbsp; Things like Adobe Acrobat, MS Office (ya ya, I know, I know.&amp;nbsp; They're needed in case I want to install more office crap.&amp;nbsp; But I'm currently happy with my install).&amp;nbsp; So, like a good schmuck, I go ahead and delete them.&lt;br&gt; &lt;br&gt; And all is well in the world.&amp;nbsp; Except that a large number of desktop icon and file association icons are now empty.&amp;nbsp; Because it can't find the icons.&amp;nbsp; Because they bound the icons to the *installation SOURCE folder* location, not the actual installation DESTINATION folder.&lt;br&gt; &lt;br&gt; Dear 'legitimate' business software developers.&amp;nbsp; Please stop being retarded.&lt;br&gt; &lt;br&gt; Thanks.&lt;br&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-112723354125118187?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/112723354125118187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=112723354125118187' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/112723354125118187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/112723354125118187'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2005/09/stuff-not-to-do-when-creating.html' title='Stuff not to do when creating an installer ...'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-112700927368284853</id><published>2005-09-17T19:07:00.000-07:00</published><updated>2005-09-17T19:07:53.686-07:00</updated><title type='text'></title><content type='html'>&lt;p&gt;Well now. The project is just about done. Lots of long days (this week was a sleepover week, thank god for comfy couches) and many tough decisions.&lt;/p&gt;  &lt;p&gt;But we're almost done. And now I sorta kinda feel a bit depressed about  it.&lt;/p&gt;  &lt;p&gt;Why?&lt;/p&gt;  &lt;p&gt;I think a lot of it has to do with things that we wanted to get done and just didn't have the manpower to do. For this project, I have a fair bit of "Woulda shoulda coulda"-itis. I'm immensely proud of the project, considering where we started, but if I had it to do all over again, I certainly would have done a lot of things differently. But that's the joy of working in a new medium (PSP). Lots and lots of things learned. I'll do a post mortem very, very soon.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-112700927368284853?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/112700927368284853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=112700927368284853' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/112700927368284853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/112700927368284853'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2005/09/well-now.html' title=''/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-112558819218592847</id><published>2005-09-01T08:23:00.000-07:00</published><updated>2005-09-01T08:23:12.200-07:00</updated><title type='text'>Cool little utility du jour</title><content type='html'>One of the things that I always wanted to write was an app similar to this.&amp;nbsp; I may still go in and modify it, since you can get at the source code.&amp;nbsp; However, check this out:&lt;br&gt; &lt;br&gt; &lt;a href="http://www.codeproject.com/tools/ToDoList2.asp"&gt;http://www.codeproject.com/tools/ToDoList2.asp&lt;/a&gt;&lt;br&gt; &lt;br&gt; So, it's exactly what it sounds like.&amp;nbsp; A to-do list.&amp;nbsp; Really easy to use, quite customizable, exports out to HTML, the whole shooting match.&lt;br&gt; &lt;br&gt; Highly recommended.&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-112558819218592847?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/112558819218592847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=112558819218592847' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/112558819218592847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/112558819218592847'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2005/09/cool-little-utility-du-jour.html' title='Cool little utility du jour'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-112542254094538509</id><published>2005-08-30T10:22:00.000-07:00</published><updated>2005-08-30T10:22:20.946-07:00</updated><title type='text'>Just for some clarification ...</title><content type='html'>I won't be using this blog to discuss any day to day happenings are my work.&amp;nbsp; This blog is meant more for personal meanderings *about* the game development process as I see it, as well as discussion of programming topics that are triggered by work.&lt;br&gt; &lt;br&gt; So don't expect to see any juicy insider game gossip.&amp;nbsp; It's just a programmer's set of ramblings about the development process.&lt;br&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-112542254094538509?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/112542254094538509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=112542254094538509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/112542254094538509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/112542254094538509'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2005/08/just-for-some-clarification.html' title='Just for some clarification ...'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-112533608648369898</id><published>2005-08-29T10:21:00.000-07:00</published><updated>2005-08-29T10:21:26.486-07:00</updated><title type='text'>Project Task Meanderings</title><content type='html'>So, I'm sitting here, contemplating the &lt;span style="font-style: italic;"&gt;next step&lt;/span&gt; that I will be taking for the next project.&amp;nbsp; I'm currently in that wonderful place that exists between the project going gold, having zero bugs and not quite being in pre-production for the next project.&lt;br&gt; &lt;br&gt; Anywho,&lt;br&gt; &lt;br&gt; For the last three projects that I've been on, I've been a generalist.&amp;nbsp; What does that mean? Essentially it means that when something breaks, I fix it.&amp;nbsp; If something needs to be created, I create it.&amp;nbsp; No real area of expertise, but a good, solid, all around understanding of all the things going on in the game.&lt;br&gt; &lt;br&gt; Now it's time to specialize.&lt;br&gt; &lt;br&gt; The opportunity came up about a month ago, as planning for the next game started in earnest.&amp;nbsp; I was sitting around, talking with my leads about the next project.&amp;nbsp; I remember mentioning to the project manager that I had a yen to work on Game Cameras, in game Cinematic (Non-Interactive Sequences) and their ilk.&amp;nbsp; However the Tech lead was currently doing all that work.&amp;nbsp; And was swamped to the gills.&amp;nbsp; The project lead told me to, essentially, get in touch with the Tech Lead as soon as I humanly could and let him know this.&amp;nbsp; Because he was swamped with the work and really needed someone to look after those systems for the next title.&lt;br&gt; &lt;br&gt; And that, as they say in your language, was how I managed to become the Camera systems programmer on the next project.&lt;br&gt; &lt;br&gt; So, one of the things that I'm going to end up talking about a fair bit are some of the things I'll be exploring in that realm.&amp;nbsp; As well, I'll be doing a fair bit of research, book wise, on topics relating to in-game cinematics and 3rd person camera navigation.&lt;br&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-112533608648369898?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/112533608648369898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=112533608648369898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/112533608648369898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/112533608648369898'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2005/08/project-task-meanderings.html' title='Project Task Meanderings'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-112523827160524407</id><published>2005-08-28T07:11:00.000-07:00</published><updated>2005-08-28T07:11:11.606-07:00</updated><title type='text'>Why remote computing doesn't work in the games industry ...</title><content type='html'>On Friday night, I'm busy working away.&amp;nbsp; I figure, &amp;quot;Hey, Maybe I won't have to come in this weekend&amp;quot;.&amp;nbsp; Lots of things are getting done and my bug count is next to zero (seriously, by next to zero, I mean one ... which is the number next to zero ... but I digress).&amp;nbsp; So I settle in for a casual weekend.&lt;br&gt; &lt;br&gt; Then on Saturday the phone call comes in.&lt;br&gt; &lt;br&gt; See, we're doing the localization ourselves, but QA is in Dublin.&amp;nbsp; Apparently there's a problem with the build.&amp;nbsp; And, me being the social creature that I am, people have a way of getting a hold of me.&amp;nbsp; So I come in on Suday to get fixes in place. But wouldn't it be great if I could have done this from home?&lt;br&gt; &lt;br&gt; Well, the problem is, there's no way for me to actually be able to do this from home.&amp;nbsp; Sure, I can access network resources from home.&amp;nbsp; Well, I can't, but that's a network issue that will just take some time to resolve.&amp;nbsp; That's a trivial problem to resolve.&lt;br&gt; &lt;br&gt; See, the problem is, I'm working on a console project.&amp;nbsp; More specifically, a PSP project.&amp;nbsp; So in order for me to test the problem, I'm going to need access to an actual, honest to god Dev Kit in order to make the changes and see if they'll work.&amp;nbsp; Sure I can re-compile everything here at home, via remote access, but I then have to burn a DVD and physically place the DVD into the dev kit.&lt;br&gt; &lt;br&gt; That's not going to happen from home.&lt;br&gt; &lt;br&gt; So here I sit, on a Sunday, waiting for a build to finish. So I can put the DVD into the Dev Tray and see if the build works now.&lt;br&gt; &lt;br&gt; And for the record, it doesn't.&lt;br&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-112523827160524407?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/112523827160524407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=112523827160524407' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/112523827160524407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/112523827160524407'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2005/08/why-remote-computing-doesnt-work-in.html' title='Why remote computing doesn&apos;t work in the games industry ...'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-112517485980453091</id><published>2005-08-27T13:34:00.000-07:00</published><updated>2005-08-27T13:34:19.806-07:00</updated><title type='text'>Testing from email</title><content type='html'>Just a quick test to see what it takes to post from email.&lt;br clear="all"&gt;&lt;br&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-112517485980453091?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/112517485980453091/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=112517485980453091' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/112517485980453091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/112517485980453091'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2005/08/testing-from-email.html' title='Testing from email'/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15865071.post-112516975014953161</id><published>2005-08-27T10:55:00.000-07:00</published><updated>2005-08-30T09:32:48.676-07:00</updated><title type='text'></title><content type='html'>&lt;span style="font-weight: bold;"&gt;__BEGIN __

&lt;/span&gt;So, I decided that I would put together a blog.  Several reasons for this.
&lt;ul&gt;   &lt;li&gt;First off, in about 3 weeks (or so) I'm going to be moving on to a new game and I thought I'd try to document the development process as much as NDAs would allow me to do so.&lt;/li&gt;   &lt;li&gt;I'd like to keep track of some things that I've developed and learned along the way. And share them with fellow developers. Again, NDAs willing.&lt;/li&gt;   &lt;li&gt;Prep some ideas for a GDC presentation I'd like to give.&lt;/li&gt;   &lt;li&gt;I finally got around to reading "Masters of Doom". Reading about Carmak's .plan files got me thinking that this might just be the creative outlet I need as part of my development process. Not comparing myself to Carmak, y'understand. I'm more like Romero :)
&lt;/li&gt; &lt;/ul&gt; You won't see a lot of personal crap from me here in this blog, aside from some observataions about people in general, the development process and the like. I'm going to &lt;span style="font-style: italic;"&gt;try&lt;/span&gt; to keep it a programming and development centric as is possible.  But I like to talk.  So who knows where I'll go with this.

&lt;span style="font-weight: bold;font-size:100%;" &gt;Some History&lt;/span&gt;
I've been programming for what feels like forever now. I started out on a Tandy Color Computer way, way, WAAAY back in the day. Took a break from coding during my high school years to learn to play guitar. Then when I had to figure out what I wanted to do with the rest of my life, computers seemed to be the best option for me. That and I really wanted to write games. Or get into space.

After one long trek through the development community took me a fair bit across the country. I'm originally from New Brunswick, Canada, but eventually settled in British Columbia. I did a brief (14 months) stint at Ubisoft Montreal, working on Splinter Cell Chaos Theory for PS2. The opportunity to move back to BC presented itself in a most timely fashion, so I came to Radical Entertainment to work on Crash - Tag Team Racing. The sub-team I got onto was the PSP sku. Been happy ever since.

Oddly enough, my first day at Radical co-incided with that being the day that Vivendi Universal also bought them. So, in theory, I'm the first Radical/VUG employee. Go Me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15865071-112516975014953161?l=crashcoder.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://crashcoder.blogspot.com/feeds/112516975014953161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15865071&amp;postID=112516975014953161' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/112516975014953161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15865071/posts/default/112516975014953161'/><link rel='alternate' type='text/html' href='http://crashcoder.blogspot.com/2005/08/begin-so-i-decided-that-i-would-put.html' title=''/><author><name>Ash Matheson</name><uri>https://profiles.google.com/112164453983502433923</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-_n8nveWL9z0/AAAAAAAAAAI/AAAAAAAAAAA/I0rcMtDNGKI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
